diff options
author | 2011-06-21 22:14:26 +0200 | |
---|---|---|
committer | 2011-06-21 22:14:26 +0200 | |
commit | 075630822d06d0899a1f4b98ef0d7e6008924cbf (patch) | |
tree | ba511f7c1cd9c2e7f27ad125d0c3c713a66f7b46 | |
parent | 50da0b3061e54f743e6199808182d262247d3af6 (diff) | |
parent | 9a2c56ec13bc7ccac17819b8b54bd6c32951dac0 (diff) |
Merge branch 'medialib' into devel
73 files changed, 4820 insertions, 1277 deletions
@@ -52,7 +52,10 @@ conf_free (void) { next = it->next; conf_item_free (it); } + conf_items = NULL; + changed = 0; mutex_free (mutex); + mutex = 0; } int diff --git a/configure.ac b/configure.ac index 2f15a13b..493926ec 100644 --- a/configure.ac +++ b/configure.ac @@ -35,6 +35,7 @@ case "$host" in i386-*-* | i486-*-* | i586-*-* | i686-*-* | i86pc-*-*) AC_DEFINE(ARCH_X86_32, 1, [architecture is x86]) LIB="../deadbeef-deps/lib-x86-32" + YASM_FLAGS="-f elf -D ARCH_X86_32 -m x86" ;; x86_64-apple-*) AC_DEFINE(ARCH_X86_64_OSX, 1, [architecture is x86_64 for OSX]) @@ -43,6 +44,7 @@ case "$host" in x86_64-*-* | amd64-*-*) AC_DEFINE(ARCH_X86_64, 1, [architecture is x86_64]) LIB="../deadbeef-deps/lib-x86-64" + YASM_FLAGS="-f elf -D ARCH_X86_64 -m amd64" ;; powerpc-*-* ) AC_DEFINE(ARCH_PPC_32, 1, [architecture is ppc32]) @@ -57,6 +59,7 @@ case "$host" in ;; esac AC_SUBST(LIB) +AC_SUBST(YASM_FLAGS) test "x$prefix" = xNONE && prefix=$ac_default_prefix @@ -105,15 +108,24 @@ AC_ARG_ENABLE(m3u, [AS_HELP_STRING([--enable-m3u ], [build m3u plugin AC_ARG_ENABLE(vfs-zip, [AS_HELP_STRING([--enable-vfs-zip ], [build vfs_zip plugin (default: auto)])], [enable_vfs_zip=$enableval], [enable_vfs_zip=yes]) AC_ARG_ENABLE(converter, [AS_HELP_STRING([--enable-converter ], [build converter plugin (default: auto)])], [enable_converter=$enableval], [enable_converter=yes]) AC_ARG_ENABLE(artwork-imlib2, [AS_HELP_STRING([--enable-artwork-imlib2 ], [use imlib2 in artwork plugin (default: auto)])], [enable_artwork_imlib2=$enableval], [enable_artwork_imlib2=yes]) +AC_ARG_ENABLE(medialib, [AS_HELP_STRING([--enable-medialib ], [build medialibrary plugin (default: auto)])], [enable_medialib=$enableval], [enable_medialib=yes]) if test "x$enable_staticlink" != "xno" ; then AC_DEFINE_UNQUOTED([STATICLINK], [1], [Define if building static version]) STATICLINK=yes fi +dnl check for yasm +AC_CHECK_PROG(HAVE_YASM, yasm, yes, no) + dnl check for libdl AC_CHECK_LIB([dl], [main], [HAVE_DL=yes;DL_LIBS="-ldl";AC_SUBST(DL_LIBS)]) +dnl check libsocket (OpenIndiana) +AC_CHECK_LIB([socket], [main], [HAVE_SOCKET=yes;DL_LIBS="-lsocket";AC_SUBST(DL_LIBS)]) +dnl check for seperate alloca.h (OpenIndiana) +AC_CHECK_HEADER([alloca.h],[],[alloca.h not found.]) + if test "x$enable_portable" != "xno" && test "x$enable_staticlink" != "xno" ; then AC_DEFINE_UNQUOTED([PORTABLE], [1], [Define if building portable version]) PORTABLE=yes @@ -538,7 +550,11 @@ if test "x$enable_converter" != "xno" ; then fi fi -PLUGINS_DIRS="plugins/lastfm plugins/mpgmad plugins/vorbis plugins/flac plugins/wavpack plugins/sndfile plugins/vfs_curl plugins/cdda plugins/gtkui plugins/alsa plugins/ffmpeg plugins/hotkeys plugins/oss plugins/artwork plugins/adplug plugins/ffap plugins/sid plugins/nullout plugins/supereq plugins/vtx plugins/gme plugins/pulse plugins/notify plugins/musepack plugins/wildmidi plugins/tta plugins/dca plugins/aac plugins/mms plugins/shellexec plugins/dsp_libsrc plugins/m3u plugins/vfs_zip plugins/converter" +if test "x$enable_medialib" != "xno" ; then + HAVE_MEDIALIB=yes +fi + +PLUGINS_DIRS="plugins/lastfm plugins/mpgmad plugins/vorbis plugins/flac plugins/wavpack plugins/sndfile plugins/vfs_curl plugins/cdda plugins/gtkui plugins/alsa plugins/ffmpeg plugins/hotkeys plugins/oss plugins/artwork plugins/adplug plugins/ffap plugins/sid plugins/nullout plugins/supereq plugins/vtx plugins/gme plugins/pulse plugins/notify plugins/musepack plugins/wildmidi plugins/tta plugins/dca plugins/aac plugins/mms plugins/shellexec plugins/dsp_libsrc plugins/m3u plugins/vfs_zip plugins/converter plugins/medialib" AM_CONDITIONAL(HAVE_VORBIS, test "x$HAVE_VORBISPLUGIN" = "xyes") AM_CONDITIONAL(HAVE_FLAC, test "x$HAVE_FLACPLUGIN" = "xyes") @@ -580,6 +596,8 @@ AM_CONDITIONAL(HAVE_CONVERTER, test "x$HAVE_CONVERTER" = "xyes") AM_CONDITIONAL(HAVE_IMLIB2, test "x$HAVE_IMLIB2" = "xyes") AM_CONDITIONAL(HAVE_JPEG, test "x$HAVE_JPEG" = "xyes") AM_CONDITIONAL(HAVE_PNG, test "x$HAVE_PNG" = "xyes") +AM_CONDITIONAL(HAVE_YASM, test "x$HAVE_YASM" = "xyes") +AM_CONDITIONAL(HAVE_MEDIALIB, test "x$HAVE_MEDIALIB" = "xyes") AC_SUBST(PLUGINS_DIRS) @@ -641,6 +659,7 @@ PRINT_PLUGIN_INFO([dsp_src],[High quality samplerate conversion using libsampler PRINT_PLUGIN_INFO([m3u],[M3U and PLS playlist support],[test "x$HAVE_M3U" = "xyes"]) PRINT_PLUGIN_INFO([vfs_zip],[zip archive support],[test "x$HAVE_VFS_ZIP" = "xyes"]) PRINT_PLUGIN_INFO([converter],[plugin for converting files to any formats],[test "x$HAVE_CONVERTER" = "xyes"]) +PRINT_PLUGIN_INFO([medialib],[media library support plugin],[test "x$HAVE_MEDIALIB" = "xyes"]) echo @@ -682,6 +701,7 @@ plugins/dsp_libsrc/Makefile plugins/m3u/Makefile plugins/vfs_zip/Makefile plugins/converter/Makefile +plugins/medialib/Makefile intl/Makefile po/Makefile.in deadbeef.desktop diff --git a/deadbeef.desktop.in b/deadbeef.desktop.in index 396e8ed1..3149fbd8 100644 --- a/deadbeef.desktop.in +++ b/deadbeef.desktop.in @@ -1,5 +1,4 @@ [Desktop Entry] -Encoding=UTF-8 Name=DeaDBeeF GenericName=Audio Player GenericName[pt_BR]=Reprodutor de áudio @@ -76,7 +76,7 @@ extern "C" { // 0.1 -- deadbeef-0.2.0 #define DB_API_VERSION_MAJOR 1 -#define DB_API_VERSION_MINOR 1 +#define DB_API_VERSION_MINOR 2 #define DDB_PLUGIN_SET_API_VERSION\ .plugin.api_vmajor = DB_API_VERSION_MAJOR,\ @@ -725,6 +725,17 @@ typedef struct { int (*dsp_preset_load) (const char *fname, struct ddb_dsp_context_s **head); int (*dsp_preset_save) (const char *fname, struct ddb_dsp_context_s *head); void (*dsp_preset_free) (struct ddb_dsp_context_s *head); + + // new 1.2 APIs + ddb_playlist_t *(*plt_alloc) (const char *title); + void (*plt_free) (ddb_playlist_t *plt); + //int (*plt_insert) (ddb_playlist_t *plt, int before); + void (*plt_set_fast_mode) (ddb_playlist_t *plt, int fast); + int (*plt_is_fast_mode) (ddb_playlist_t *plt); + const char * (*metacache_add_string) (const char *str); + void (*metacache_remove_string) (const char *str); + void (*metacache_ref) (const char *str); + void (*metacache_unref) (const char *str); } DB_functions_t; enum { diff --git a/examples/dsp_template.c b/examples/dsp_template.c index d78d7531..dd65cc3a 100644 --- a/examples/dsp_template.c +++ b/examples/dsp_template.c @@ -116,6 +116,7 @@ static DB_dsp_t plugin = { .plugin.name = "example", .plugin.descr = "example DSP Plugin", .plugin.copyright = "copyright message - author(s), license, etc", + .plugin.website = "http://example.com", .num_params = example_num_params, .get_param_name = example_get_param_name, .set_param = example_set_param, @@ -2999,6 +2999,7 @@ junk_id3v2_read_full (playItem_t *it, DB_id3v2_tag_t *tag_store, DB_FILE *fp) { uint8_t *tag = malloc (size); if (!tag) { fprintf (stderr, "junklib: out of memory while reading id3v2, tried to alloc %d bytes\n", size); + goto error; } if (deadbeef->fread (tag, 1, size, fp) != size) { goto error; // bad size @@ -15,6 +15,9 @@ You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif #include <stdio.h> #include <stdint.h> #include <string.h> @@ -26,7 +29,7 @@ #include <sys/prctl.h> #endif #ifndef __linux__ -#define _POSIX_C_SOURCE +#define _POSIX_C_SOURCE 1 #endif #include <limits.h> #include <errno.h> @@ -41,9 +44,6 @@ #ifdef __linux__ #include <execinfo.h> #endif -#ifdef HAVE_CONFIG_H -# include <config.h> -#endif #include <unistd.h> #include "gettext.h" #include "playlist.h" diff --git a/metacache.c b/metacache.c index 84acaa91..13616516 100644 --- a/metacache.c +++ b/metacache.c @@ -114,3 +114,15 @@ metacache_remove_string (const char *str) { chain = chain->next; } } + +void +metacache_ref (const char *str) { + uint32_t *refc = (uint32_t)(str-5); + *refc++; +} + +void +metacache_unref (const char *str) { + uint32_t *refc = (uint32_t *)(str-5); + *refc--; +} diff --git a/metacache.h b/metacache.h index b5187c0f..50c5cb7f 100644 --- a/metacache.h +++ b/metacache.h @@ -25,4 +25,10 @@ metacache_add_string (const char *str); void metacache_remove_string (const char *str); +void +metacache_ref (const char *str); + +void +metacache_unref (const char *str); + #endif @@ -18,6 +18,9 @@ #ifdef HAVE_CONFIG_H # include "config.h" #endif +#ifdef HAVE_ALLOCA_H +# include <alloca.h> +#endif #include <stdlib.h> #include <string.h> #include <dirent.h> @@ -31,7 +34,7 @@ #include <time.h> #include <sys/time.h> #ifndef __linux__ -#define _POSIX_C_SOURCE +#define _POSIX_C_SOURCE 1 #endif #include <limits.h> #include <errno.h> @@ -109,7 +112,7 @@ static playlist_t *addfiles_playlist; // current playlist for adding files/folde void pl_set_order (int order) { - if (pl_order != order && (pl_order == PLAYBACK_ORDER_SHUFFLE_TRACKS || pl_order == PLAYBACK_ORDER_SHUFFLE_ALBUMS)) { + if (pl_order != order || pl_order == PLAYBACK_ORDER_SHUFFLE_TRACKS || pl_order == PLAYBACK_ORDER_SHUFFLE_ALBUMS) { pl_order = order; for (playlist_t *plt = playlists_head; plt; plt = plt->next) { plt_reshuffle (plt, NULL, NULL); @@ -162,6 +165,7 @@ pl_free (void) { mutex_plt = 0; } #endif + playlist = NULL; } #if DEBUG_LOCKING @@ -323,6 +327,15 @@ plt_get_sel_count (int plt) { return 0; } +playlist_t * +plt_alloc (const char *title) { + playlist_t *plt = malloc (sizeof (playlist_t)); + memset (plt, 0, sizeof (playlist_t)); + plt->refc = 1; + plt->title = strdup (title); + return plt; +} + int plt_add (int before, const char *title) { assert (before >= 0); @@ -331,10 +344,7 @@ plt_add (int before, const char *title) { fprintf (stderr, "can't create more than 100 playlists. sorry.\n"); return -1; } - playlist_t *plt = malloc (sizeof (playlist_t)); - memset (plt, 0, sizeof (playlist_t)); - plt->refc = 1; - plt->title = strdup (title); + playlist_t *plt = plt_alloc (title); plt_modified (plt); LOCK; @@ -394,7 +404,7 @@ plt_add (int before, const char *title) { conf_save (); messagepump_push (DB_EV_PLAYLISTSWITCHED, 0, 0, 0); } - return playlists_count-1; + return before; } // NOTE: caller must ensure that configuration is saved after that call @@ -976,7 +986,7 @@ plt_process_cue_track (playlist_t *playlist, playItem_t *after, const char *fnam pl_set_item_replaygain (it, DDB_REPLAYGAIN_TRACKPEAK, atof (replaygain_track_peak)); } it->_flags |= DDB_IS_SUBTRACK | DDB_TAG_CUESHEET; - after = pl_insert_item (after, it); + after = plt_insert_item (playlist, after, it); pl_item_unref (it); *prev = it; return it; @@ -3893,3 +3903,13 @@ plt_init_shuffle_albums (playlist_t *plt, int r) { } pl_unlock (); } + +void +plt_set_fast_mode (playlist_t *plt, int fast) { + plt->fast_mode = (unsigned)fast; +} + +int +plt_is_fast_mode (playlist_t *plt) { + return plt->fast_mode; +} @@ -56,6 +56,7 @@ typedef struct playlist_s { int current_row[PL_MAX_ITERATORS]; // current row (cursor) struct DB_metaInfo_s *meta; // linked list storing metainfo int refc; + unsigned fast_mode : 1; } playlist_t; // global playlist control functions @@ -92,6 +93,9 @@ plt_ref (playlist_t *plt); void plt_unref (playlist_t *plt); +playlist_t * +plt_alloc (const char *title); + void plt_free (playlist_t *plt); @@ -437,4 +441,10 @@ pl_get_playlist (playItem_t *it); void plt_init_shuffle_albums (playlist_t *plt, int r); +void +plt_set_fast_mode (playlist_t *plt, int fast); + +int +plt_is_fast_mode (playlist_t *plt); + #endif // __PLAYLIST_H @@ -24,7 +24,7 @@ //#include <alloca.h> #include <string.h> #ifndef __linux__ -#define _POSIX_C_SOURCE +#define _POSIX_C_SOURCE 1 #endif #include <limits.h> #ifdef HAVE_CONFIG_H @@ -45,6 +45,7 @@ #include "premix.h" #include "dsppreset.h" #include "pltmeta.h" +#include "metacache.h" #define trace(...) { fprintf(stderr, __VA_ARGS__); } //#define trace(fmt,...) @@ -316,7 +317,17 @@ static DB_functions_t deadbeef_api = { // dsp preset management .dsp_preset_load = dsp_preset_load, .dsp_preset_save = dsp_preset_save, - .dsp_preset_free = dsp_preset_free + .dsp_preset_free = dsp_preset_free, + // new 1.2 APIs + .plt_alloc = (ddb_playlist_t *(*)(const char *title))plt_alloc, + .plt_free = (void (*)(ddb_playlist_t *plt))plt_free, + //.plt_insert = plt_insert, + .plt_set_fast_mode = (void (*)(ddb_playlist_t *plt, int fast))plt_set_fast_mode, + .plt_is_fast_mode = (int (*)(ddb_playlist_t *plt))plt_is_fast_mode, + .metacache_add_string = metacache_add_string, + .metacache_remove_string = metacache_remove_string, + .metacache_ref = metacache_ref, + .metacache_unref = metacache_unref, }; DB_functions_t *deadbeef = &deadbeef_api; @@ -556,9 +567,9 @@ load_plugin (const char *plugdir, char *d_name, int l) { trace ("loading plugin %s/%s\n", plugdir, d_name); void *handle = dlopen (fullname, RTLD_NOW); if (!handle) { - //trace ("dlopen error: %s\n", dlerror ()); + trace ("dlopen error: %s\n", dlerror ()); #ifdef ANDROID - break; + return -1; #else strcpy (fullname + strlen(fullname) - 3, ".fallback.so"); trace ("trying %s...\n", fullname); @@ -740,9 +751,9 @@ plug_load_all (void) { trace ("\033[0;31mDISABLE_VERSIONCHECK=1! do not distribute!\033[0;m\n"); #endif -#ifndef ANDROID const char *dirname = deadbeef->get_plugin_dir (); +#ifndef ANDROID char *xdg_local_home = getenv ("XDG_LOCAL_HOME"); char xdg_plugin_dir[1024]; @@ -783,7 +794,7 @@ plug_load_all (void) { #ifdef ANDROID char plugin_path[1000]; - strncpy (plugin_path, conf_get_str ("android.plugin_path", ""), sizeof (plugin_path)-1); + strncpy (plugin_path, conf_get_str_fast ("android.plugin_path", ""), sizeof (plugin_path)-1); plugin_path[sizeof(plugin_path)-1] = 0; char *p = plugin_path; while (*p) { @@ -996,6 +1007,17 @@ plug_unload_all (void) { g_gui_names[i] = NULL; } plugins_tail = NULL; + + memset (g_plugins, 0, sizeof (g_plugins)); + memset (g_gui_names, 0, sizeof (g_gui_names)); + g_num_gui_names = 0; + memset (g_decoder_plugins, 0, sizeof (g_decoder_plugins)); + memset (g_vfs_plugins, 0, sizeof (g_vfs_plugins)); + memset (g_dsp_plugins, 0, sizeof (g_dsp_plugins)); + memset (g_output_plugins, 0, sizeof (g_output_plugins)); + output_plugin = NULL; + memset (g_playlist_plugins, 0, sizeof (g_playlist_plugins)); + trace ("all plugins had been unloaded\n"); } diff --git a/plugins/aac/aac.c b/plugins/aac/aac.c index c8a6abc4..6f3e4273 100644 --- a/plugins/aac/aac.c +++ b/plugins/aac/aac.c @@ -1256,7 +1256,7 @@ aac_insert (ddb_playlist_t *plt, DB_playItem_t *after, const char *fname) { MP4Close (mp4); #endif } - else if (ftype == "aac") { + else if (ftype && !strcmp (ftype, "RAW AAC")) { int apeerr = deadbeef->junk_apev2_read (it, fp); int v2err = deadbeef->junk_id3v2_read (it, fp); int v1err = deadbeef->junk_id3v1_read (it, fp); diff --git a/plugins/ao/Makefile b/plugins/ao/Makefile index df3b9fd3..d188294d 100644 --- a/plugins/ao/Makefile +++ b/plugins/ao/Makefile @@ -1,6 +1,6 @@ -OUT=ao.so +OUT=ddb_aopsf.so -CC=gcc +CC?=gcc ZLIB_LIBS?=-lz diff --git a/plugins/ao/main.c b/plugins/ao/main.c index a4da36d0..18067410 100644 --- a/plugins/ao/main.c +++ b/plugins/ao/main.c @@ -27,7 +27,7 @@ #include <stdio.h> #include <stdlib.h> #include <string.h> -#include "../../deadbeef.h" +#include <deadbeef/deadbeef.h> #include "ao.h" #include "eng_protos.h" diff --git a/plugins/ao/plugin.c b/plugins/ao/plugin.c index ebef512e..65b3e1c8 100644 --- a/plugins/ao/plugin.c +++ b/plugins/ao/plugin.c @@ -18,7 +18,7 @@ */ #include <stdlib.h> #include <string.h> -#include "../../deadbeef.h" +#include <deadbeef/deadbeef.h> #include "ao.h" #include "eng_protos.h" @@ -350,8 +350,8 @@ static DB_decoder_t plugin = { .plugin.version_minor = 0, .plugin.type = DB_PLUGIN_DECODER, .plugin.id = "psf", - .plugin.name = "Audio Overload plugin", - .plugin.descr = "psf, psf2, spu, ssf, minidsf player based on Audio Overload library", + .plugin.name = "PSF player using Audio Overload SDK", + .plugin.descr = "plays psf, psf2, spu, ssf, dsf, qsf file formats", .plugin.copyright = "Copyright (C) 2009-2011 Alexey Yakovenko <waker@users.sourceforge.net>\n" "\n" @@ -387,7 +387,7 @@ static DB_decoder_t plugin = { }; DB_plugin_t * -ao_load (DB_functions_t *api) { +ddb_aopsf_load (DB_functions_t *api) { deadbeef = api; return DB_PLUGIN (&plugin); } diff --git a/plugins/artwork/albumartorg.c b/plugins/artwork/albumartorg.c index ada7179f..51ca54cb 100644 --- a/plugins/artwork/albumartorg.c +++ b/plugins/artwork/albumartorg.c @@ -16,6 +16,9 @@ along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif #include <stdlib.h> #include <string.h> #include <unistd.h> diff --git a/plugins/artwork/artwork.c b/plugins/artwork/artwork.c index c2a8b766..7f56b870 100644 --- a/plugins/artwork/artwork.c +++ b/plugins/artwork/artwork.c @@ -1,3 +1,6 @@ +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif #include <stdio.h> #include <stdlib.h> #include <string.h> @@ -721,6 +724,11 @@ static const char *filter_custom_mask = NULL; static int filter_custom (const struct dirent *f) { +// FNM_CASEFOLD is not defined on solaris. On other platforms it is. +// It should be safe to define it as FNM_INGORECASE if it isn't defined. +#ifndef FNM_CASEFOLD +#define FNM_CASEFOLD FNM_IGNORECASE +#endif if (!fnmatch (filter_custom_mask, f->d_name, FNM_CASEFOLD)) { return 1; } diff --git a/plugins/artwork/lastfm.c b/plugins/artwork/lastfm.c index 2e78fd87..91972c8a 100644 --- a/plugins/artwork/lastfm.c +++ b/plugins/artwork/lastfm.c @@ -1,3 +1,6 @@ +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif #include <stdio.h> #include <string.h> #include <stdlib.h> diff --git a/plugins/converter/Makefile.am b/plugins/converter/Makefile.am index 5bab060c..70ef9013 100644 --- a/plugins/converter/Makefile.am +++ b/plugins/converter/Makefile.am @@ -1,8 +1,5 @@ if HAVE_CONVERTER -if STATICLINK -pkglib_LTLIBRARIES = converter.la converter_gtkui.la converter_gtkui.fallback.la -else pkglib_LTLIBRARIES = converter.la converter_gtkui.la convdatadir = $(libdir)/deadbeef/convpresets @@ -19,25 +16,21 @@ convdata_DATA = \ EXTRA_DIST = $(convdata_DATA) -endif - AM_CFLAGS = $(CFLAGS) -std=c99 -fPIC converter_la_SOURCES = converter.c converter.h converter_la_LDFLAGS = -module converter_gtkui_la_SOURCES = convgui.c interface.c support.c callbacks.h converter.h interface.h support.h converter_gtkui_la_LDFLAGS = -module -converter_gtkui_la_LIBADD = $(LDADD) $(GTKUI_DEPS_LIBS) -converter_gtkui_la_CFLAGS = -std=c99 $(GTKUI_DEPS_CFLAGS) -# fallback lib if STATICLINK GTK_ROOT=@top_srcdir@/$(LIB)/gtk-2.12.12/usr -converter_gtkui_fallback_la_SOURCES = convgui.c interface.c support.c callbacks.h converter.h interface.h support.h -converter_gtkui_fallback_la_LDFLAGS = -module -converter_gtkui_fallback_la_LIBADD = $(LDADD) -L$(GTK_ROOT)/lib $(GTK_ROOT)/lib/libgtk-x11-2.0.la $(GTK_ROOT)/lib/libgdk-x11-2.0.la $(GTK_ROOT)/lib/libpangoft2-1.0.la $(GTK_ROOT)/lib/libpangocairo-1.0.la $(GTK_ROOT)/lib/libgdk_pixbuf-2.0.la -lm $(GTK_ROOT)/lib/libcairo.la $(GTK_ROOT)/lib/libpango-1.0.la $(GTK_ROOT)/lib/libgobject-2.0.la $(GTK_ROOT)/lib/libgmodule-2.0.la $(GTK_ROOT)/lib/libgthread-2.0.la -lrt $(GTK_ROOT)/lib/libglib-2.0.la +converter_gtkui_la_LIBADD = $(LDADD) -L$(GTK_ROOT)/lib $(GTK_ROOT)/lib/libgtk-x11-2.0.la $(GTK_ROOT)/lib/libgdk-x11-2.0.la $(GTK_ROOT)/lib/libpangoft2-1.0.la $(GTK_ROOT)/lib/libpangocairo-1.0.la $(GTK_ROOT)/lib/libgdk_pixbuf-2.0.la -lm $(GTK_ROOT)/lib/libcairo.la $(GTK_ROOT)/lib/libpango-1.0.la $(GTK_ROOT)/lib/libgobject-2.0.la $(GTK_ROOT)/lib/libgmodule-2.0.la $(GTK_ROOT)/lib/libgthread-2.0.la -lrt $(GTK_ROOT)/lib/libglib-2.0.la -converter_gtkui_fallback_la_CFLAGS = -std=c99 -I $(GTK_ROOT)/include -I $(GTK_ROOT)/lib/gtk-2.0/include -I $(GTK_ROOT)/include/glib-2.0 -I $(GTK_ROOT)/include/gtk-2.0 -I $(GTK_ROOT)/include/cairo -I $(GTK_ROOT)/lib/glib-2.0/include/ -I $(GTK_ROOT)/include/pango-1.0 -I $(GTK_ROOT)/include/atk-1.0 -DULTRA_COMPATIBLE=1 +converter_gtkui_la_CFLAGS = -std=c99 -I $(GTK_ROOT)/include -I $(GTK_ROOT)/lib/gtk-2.0/include -I $(GTK_ROOT)/include/glib-2.0 -I $(GTK_ROOT)/include/gtk-2.0 -I $(GTK_ROOT)/include/cairo -I $(GTK_ROOT)/lib/glib-2.0/include/ -I $(GTK_ROOT)/include/pango-1.0 -I $(GTK_ROOT)/include/atk-1.0 -DULTRA_COMPATIBLE=1 +else +converter_gtkui_la_LIBADD = $(LDADD) $(GTKUI_DEPS_LIBS) +converter_gtkui_la_CFLAGS = -std=c99 $(GTKUI_DEPS_CFLAGS) endif diff --git a/plugins/converter/converter.c b/plugins/converter/converter.c index a00de67a..04a97777 100644 --- a/plugins/converter/converter.c +++ b/plugins/converter/converter.c @@ -750,7 +750,7 @@ convert (DB_playItem_t *it, const char *outfolder, const char *outfile, int outp int len = sizeof (enc); while (e && *e) { if (len <= 0) { - fprintf (stderr, "converter: failed to assemble encoder command line - buffer is not big enough, try to shorten your parameters. max allowed length is %lu characters\n", sizeof (enc)); + fprintf (stderr, "converter: failed to assemble encoder command line - buffer is not big enough, try to shorten your parameters. max allowed length is %u characters\n", (unsigned)sizeof (enc)); goto error; } if (e[0] == '%' && e[1]) { diff --git a/plugins/converter/convgui.c b/plugins/converter/convgui.c index 07db172a..9a20d274 100644 --- a/plugins/converter/convgui.c +++ b/plugins/converter/convgui.c @@ -108,7 +108,7 @@ overwrite_prompt_cb (void *ctx) { GtkWidget *dlg = gtk_message_dialog_new (GTK_WINDOW (mainwin), GTK_DIALOG_MODAL, GTK_MESSAGE_WARNING, GTK_BUTTONS_YES_NO, _("The file already exists. Overwrite?")); gtk_window_set_transient_for (GTK_WINDOW (dlg), GTK_WINDOW (mainwin)); gtk_window_set_title (GTK_WINDOW (dlg), _("Converter warning")); - gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dlg), ctl->fname); + gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dlg), "%s", ctl->fname); int response = gtk_dialog_run (GTK_DIALOG (dlg)); gtk_widget_destroy (dlg); diff --git a/plugins/dumb/Makefile b/plugins/dumb/Makefile index e9b05233..e993012f 100644 --- a/plugins/dumb/Makefile +++ b/plugins/dumb/Makefile @@ -1,4 +1,6 @@ -CC=gcc +OUT=ddb_dumb.so + +CC?=gcc dumbpath=dumb-kode54 @@ -81,8 +83,6 @@ cdumb.c OBJECTS=$(SOURCES:.c=.o) -OUT=dumb.so - all: $(SOURCES) $(OUT) $(OUT): $(OBJECTS) diff --git a/plugins/dumb/cdumb.c b/plugins/dumb/cdumb.c index 405878ad..f947d94a 100644 --- a/plugins/dumb/cdumb.c +++ b/plugins/dumb/cdumb.c @@ -23,7 +23,7 @@ #include <string.h> #include "dumb.h" #include "internal/it.h" -#include "../../deadbeef.h" +#include <deadbeef/deadbeef.h> //#define trace(...) { fprintf(stderr, __VA_ARGS__); } #define trace(fmt,...) @@ -921,7 +921,7 @@ static DB_decoder_t plugin = { }; DB_plugin_t * -dumb_load (DB_functions_t *api) { +ddb_dumb_load (DB_functions_t *api) { deadbeef = api; return DB_PLUGIN (&plugin); } diff --git a/plugins/ffap/Makefile.am b/plugins/ffap/Makefile.am index a3671fbe..736392c3 100644 --- a/plugins/ffap/Makefile.am +++ b/plugins/ffap/Makefile.am @@ -1,8 +1,25 @@ if HAVE_FFAP ffapdir = $(libdir)/$(PACKAGE) pkglib_LTLIBRARIES = ffap.la -ffap_la_SOURCES = ffap.c + +topsrcdir = @top_srcdir@ +EXTRA_PROGRAMS = foo +YASM=$(topsrcdir)/yasmwrapper.sh +SUFFIXES = .asm + +if HAVE_YASM +INTEL_SRC=dsputil_yasm.asm +ffap_la_DEPENDENCIES=dsputil_yasm.lo +endif + +ffap_la_SOURCES = ffap.c $(INTEL_SRC) + +if HAVE_YASM +.asm.lo: + $(LIBTOOL) --tag=CC --mode=compile $(YASM) $(YASM_FLAGS) -o $@ $< +endif + ffap_la_LDFLAGS = -module -AM_CFLAGS = $(CFLAGS) -std=c99 +AM_CFLAGS = $(CFLAGS) -fPIC -std=c99 endif diff --git a/plugins/ffap/asm.S b/plugins/ffap/asm.S new file mode 100644 index 00000000..e0507834 --- /dev/null +++ b/plugins/ffap/asm.S @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2008 Mans Rullgard <mans@mansr.com> + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "config.h" + +#ifdef __ELF__ +# define ELF +#else +# define ELF @ +#endif + +.macro require8 val=1 +ELF .eabi_attribute 24, \val +.endm + +.macro preserve8 val=1 +ELF .eabi_attribute 25, \val +.endm + +.macro function name, export=0 + .macro endfunc +ELF .size \name, . - \name + .endfunc + .purgem endfunc + .endm + .text + .if \export + .global EXTERN_ASM\name +EXTERN_ASM\name: + .endif +ELF .type \name, %function + .func \name +\name: +.endm + +.macro mov32 rd, val +#if HAVE_ARMV6T2 + movw \rd, #(\val) & 0xffff + .if (\val) >> 16 + movt \rd, #(\val) >> 16 + .endif +#else + ldr \rd, =\val +#endif +.endm + +.macro movrel rd, val +#if HAVE_ARMV6T2 && !CONFIG_PIC && !defined(__APPLE__) + movw \rd, #:lower16:\val + movt \rd, #:upper16:\val +#else + ldr \rd, =\val +#endif +.endm + +#if HAVE_VFP_ARGS + .eabi_attribute 28, 1 +# define VFP +# define NOVFP @ +#else +# define VFP @ +# define NOVFP +#endif + +#define GLUE(a, b) a ## b +#define JOIN(a, b) GLUE(a, b) +#define X(s) JOIN(EXTERN_ASM, s) diff --git a/plugins/ffap/dsputil_yasm.asm b/plugins/ffap/dsputil_yasm.asm new file mode 100644 index 00000000..e2478a48 --- /dev/null +++ b/plugins/ffap/dsputil_yasm.asm @@ -0,0 +1,423 @@ +;****************************************************************************** +;* MMX optimized DSP utils +;* Copyright (c) 2008 Loren Merritt +;* +;* This file is part of FFmpeg. +;* +;* FFmpeg is free software; you can redistribute it and/or +;* modify it under the terms of the GNU Lesser General Public +;* License as published by the Free Software Foundation; either +;* version 2.1 of the License, or (at your option) any later version. +;* +;* FFmpeg 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 +;* Lesser General Public License for more details. +;* +;* You should have received a copy of the GNU Lesser General Public +;* License along with FFmpeg; if not, write to the Free Software +;* 51, Inc., Foundation Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +;****************************************************************************** + +%include "x86inc.asm" + +SECTION_RODATA +pb_f: times 16 db 15 +pb_zzzzzzzz77777777: times 8 db -1 +pb_7: times 8 db 7 +pb_zzzz3333zzzzbbbb: db -1,-1,-1,-1,3,3,3,3,-1,-1,-1,-1,11,11,11,11 +pb_zz11zz55zz99zzdd: db -1,-1,1,1,-1,-1,5,5,-1,-1,9,9,-1,-1,13,13 + +section .text align=16 + +%macro PSWAPD_SSE 2 + pshufw %1, %2, 0x4e +%endmacro +%macro PSWAPD_3DN1 2 + movq %1, %2 + psrlq %1, 32 + punpckldq %1, %2 +%endmacro + +%macro FLOAT_TO_INT16_INTERLEAVE6 1 +; void ff_float_to_int16_interleave6_sse(int16_t *dst, const float **src, int len) +cglobal float_to_int16_interleave6_%1, 2,7,0, dst, src, src1, src2, src3, src4, src5 +%ifdef ARCH_X86_64 + %define lend r10d + mov lend, r2d +%else + %define lend dword r2m +%endif + mov src1q, [srcq+1*gprsize] + mov src2q, [srcq+2*gprsize] + mov src3q, [srcq+3*gprsize] + mov src4q, [srcq+4*gprsize] + mov src5q, [srcq+5*gprsize] + mov srcq, [srcq] + sub src1q, srcq + sub src2q, srcq + sub src3q, srcq + sub src4q, srcq + sub src5q, srcq +.loop: + cvtps2pi mm0, [srcq] + cvtps2pi mm1, [srcq+src1q] + cvtps2pi mm2, [srcq+src2q] + cvtps2pi mm3, [srcq+src3q] + cvtps2pi mm4, [srcq+src4q] + cvtps2pi mm5, [srcq+src5q] + packssdw mm0, mm3 + packssdw mm1, mm4 + packssdw mm2, mm5 + pswapd mm3, mm0 + punpcklwd mm0, mm1 + punpckhwd mm1, mm2 + punpcklwd mm2, mm3 + pswapd mm3, mm0 + punpckldq mm0, mm2 + punpckhdq mm2, mm1 + punpckldq mm1, mm3 + movq [dstq ], mm0 + movq [dstq+16], mm2 + movq [dstq+ 8], mm1 + add srcq, 8 + add dstq, 24 + sub lend, 2 + jg .loop + emms + RET +%endmacro ; FLOAT_TO_INT16_INTERLEAVE6 + +%define pswapd PSWAPD_SSE +FLOAT_TO_INT16_INTERLEAVE6 sse +%define cvtps2pi pf2id +%define pswapd PSWAPD_3DN1 +FLOAT_TO_INT16_INTERLEAVE6 3dnow +%undef pswapd +FLOAT_TO_INT16_INTERLEAVE6 3dn2 +%undef cvtps2pi + + + +%macro SCALARPRODUCT 1 +; int scalarproduct_int16(int16_t *v1, int16_t *v2, int order, int shift) +cglobal scalarproduct_int16_%1, 3,3,4, v1, v2, order, shift + shl orderq, 1 + add v1q, orderq + add v2q, orderq + neg orderq + movd m3, shiftm + pxor m2, m2 +.loop: + movu m0, [v1q + orderq] + movu m1, [v1q + orderq + mmsize] + pmaddwd m0, [v2q + orderq] + pmaddwd m1, [v2q + orderq + mmsize] + paddd m2, m0 + paddd m2, m1 + add orderq, mmsize*2 + jl .loop +%if mmsize == 16 + movhlps m0, m2 + paddd m2, m0 + psrad m2, m3 + pshuflw m0, m2, 0x4e +%else + psrad m2, m3 + pshufw m0, m2, 0x4e +%endif + paddd m2, m0 + movd eax, m2 + RET + +; int scalarproduct_and_madd_int16(int16_t *v1, int16_t *v2, int16_t *v3, int order, int mul) +cglobal scalarproduct_and_madd_int16_%1, 4,4,8, v1, v2, v3, order, mul + shl orderq, 1 + movd m7, mulm +%if mmsize == 16 + pshuflw m7, m7, 0 + punpcklqdq m7, m7 +%else + pshufw m7, m7, 0 +%endif + pxor m6, m6 + add v1q, orderq + add v2q, orderq + add v3q, orderq + neg orderq +.loop: + movu m0, [v2q + orderq] + movu m1, [v2q + orderq + mmsize] + mova m4, [v1q + orderq] + mova m5, [v1q + orderq + mmsize] + movu m2, [v3q + orderq] + movu m3, [v3q + orderq + mmsize] + pmaddwd m0, m4 + pmaddwd m1, m5 + pmullw m2, m7 + pmullw m3, m7 + paddd m6, m0 + paddd m6, m1 + paddw m2, m4 + paddw m3, m5 + mova [v1q + orderq], m2 + mova [v1q + orderq + mmsize], m3 + add orderq, mmsize*2 + jl .loop +%if mmsize == 16 + movhlps m0, m6 + paddd m6, m0 + pshuflw m0, m6, 0x4e +%else + pshufw m0, m6, 0x4e +%endif + paddd m6, m0 + movd eax, m6 + RET +%endmacro + +INIT_MMX +SCALARPRODUCT mmx2 +INIT_XMM +SCALARPRODUCT sse2 + +%macro SCALARPRODUCT_LOOP 1 +align 16 +.loop%1: + sub orderq, mmsize*2 +%if %1 + mova m1, m4 + mova m4, [v2q + orderq] + mova m0, [v2q + orderq + mmsize] + palignr m1, m0, %1 + palignr m0, m4, %1 + mova m3, m5 + mova m5, [v3q + orderq] + mova m2, [v3q + orderq + mmsize] + palignr m3, m2, %1 + palignr m2, m5, %1 +%else + mova m0, [v2q + orderq] + mova m1, [v2q + orderq + mmsize] + mova m2, [v3q + orderq] + mova m3, [v3q + orderq + mmsize] +%endif + %define t0 [v1q + orderq] + %define t1 [v1q + orderq + mmsize] +%ifdef ARCH_X86_64 + mova m8, t0 + mova m9, t1 + %define t0 m8 + %define t1 m9 +%endif + pmaddwd m0, t0 + pmaddwd m1, t1 + pmullw m2, m7 + pmullw m3, m7 + paddw m2, t0 + paddw m3, t1 + paddd m6, m0 + paddd m6, m1 + mova [v1q + orderq], m2 + mova [v1q + orderq + mmsize], m3 + jg .loop%1 +%if %1 + jmp .end +%endif +%endmacro + +; int scalarproduct_and_madd_int16(int16_t *v1, int16_t *v2, int16_t *v3, int order, int mul) +cglobal scalarproduct_and_madd_int16_ssse3, 4,5,10, v1, v2, v3, order, mul + shl orderq, 1 + movd m7, mulm + pshuflw m7, m7, 0 + punpcklqdq m7, m7 + pxor m6, m6 + mov r4d, v2d + and r4d, 15 + and v2q, ~15 + and v3q, ~15 + mova m4, [v2q + orderq] + mova m5, [v3q + orderq] + ; linear is faster than branch tree or jump table, because the branches taken are cyclic (i.e. predictable) + cmp r4d, 0 + je .loop0 + cmp r4d, 2 + je .loop2 + cmp r4d, 4 + je .loop4 + cmp r4d, 6 + je .loop6 + cmp r4d, 8 + je .loop8 + cmp r4d, 10 + je .loop10 + cmp r4d, 12 + je .loop12 +SCALARPRODUCT_LOOP 14 +SCALARPRODUCT_LOOP 12 +SCALARPRODUCT_LOOP 10 +SCALARPRODUCT_LOOP 8 +SCALARPRODUCT_LOOP 6 +SCALARPRODUCT_LOOP 4 +SCALARPRODUCT_LOOP 2 +SCALARPRODUCT_LOOP 0 +.end: + movhlps m0, m6 + paddd m6, m0 + pshuflw m0, m6, 0x4e + paddd m6, m0 + movd eax, m6 + RET + + + +; void ff_add_hfyu_median_prediction_mmx2(uint8_t *dst, const uint8_t *top, const uint8_t *diff, int w, int *left, int *left_top) +cglobal add_hfyu_median_prediction_mmx2, 6,6,0, dst, top, diff, w, left, left_top + movq mm0, [topq] + movq mm2, mm0 + movd mm4, [left_topq] + psllq mm2, 8 + movq mm1, mm0 + por mm4, mm2 + movd mm3, [leftq] + psubb mm0, mm4 ; t-tl + add dstq, wq + add topq, wq + add diffq, wq + neg wq + jmp .skip +.loop: + movq mm4, [topq+wq] + movq mm0, mm4 + psllq mm4, 8 + por mm4, mm1 + movq mm1, mm0 ; t + psubb mm0, mm4 ; t-tl +.skip: + movq mm2, [diffq+wq] +%assign i 0 +%rep 8 + movq mm4, mm0 + paddb mm4, mm3 ; t-tl+l + movq mm5, mm3 + pmaxub mm3, mm1 + pminub mm5, mm1 + pminub mm3, mm4 + pmaxub mm3, mm5 ; median + paddb mm3, mm2 ; +residual +%if i==0 + movq mm7, mm3 + psllq mm7, 56 +%else + movq mm6, mm3 + psrlq mm7, 8 + psllq mm6, 56 + por mm7, mm6 +%endif +%if i<7 + psrlq mm0, 8 + psrlq mm1, 8 + psrlq mm2, 8 +%endif +%assign i i+1 +%endrep + movq [dstq+wq], mm7 + add wq, 8 + jl .loop + movzx r2d, byte [dstq-1] + mov [leftq], r2d + movzx r2d, byte [topq-1] + mov [left_topq], r2d + RET + + +%macro ADD_HFYU_LEFT_LOOP 1 ; %1 = is_aligned + add srcq, wq + add dstq, wq + neg wq +%%.loop: + mova m1, [srcq+wq] + mova m2, m1 + psllw m1, 8 + paddb m1, m2 + mova m2, m1 + pshufb m1, m3 + paddb m1, m2 + pshufb m0, m5 + mova m2, m1 + pshufb m1, m4 + paddb m1, m2 +%if mmsize == 16 + mova m2, m1 + pshufb m1, m6 + paddb m1, m2 +%endif + paddb m0, m1 +%if %1 + mova [dstq+wq], m0 +%else + movq [dstq+wq], m0 + movhps [dstq+wq+8], m0 +%endif + add wq, mmsize + jl %%.loop + mov eax, mmsize-1 + sub eax, wd + movd m1, eax + pshufb m0, m1 + movd eax, m0 + RET +%endmacro + +; int ff_add_hfyu_left_prediction(uint8_t *dst, const uint8_t *src, int w, int left) +INIT_MMX +cglobal add_hfyu_left_prediction_ssse3, 3,3,7, dst, src, w, left +.skip_prologue: + mova m5, [pb_7 GLOBAL] + mova m4, [pb_zzzz3333zzzzbbbb GLOBAL] + mova m3, [pb_zz11zz55zz99zzdd GLOBAL] + movd m0, leftm + psllq m0, 56 + ADD_HFYU_LEFT_LOOP 1 + +INIT_XMM +cglobal add_hfyu_left_prediction_sse4, 3,3,7, dst, src, w, left + mova m5, [pb_f GLOBAL] + mova m6, [pb_zzzzzzzz77777777 GLOBAL] + mova m4, [pb_zzzz3333zzzzbbbb GLOBAL] + mova m3, [pb_zz11zz55zz99zzdd GLOBAL] + movd m0, leftm + pslldq m0, 15 + test srcq, 15 + jnz add_hfyu_left_prediction_ssse3.skip_prologue + test dstq, 15 + jnz .unaligned + ADD_HFYU_LEFT_LOOP 1 +.unaligned: + ADD_HFYU_LEFT_LOOP 0 + + +; float ff_scalarproduct_float_sse(const float *v1, const float *v2, int len) +cglobal scalarproduct_float_sse, 3,3,2, v1, v2, offset + neg offsetq + shl offsetq, 2 + sub v1q, offsetq + sub v2q, offsetq + xorps xmm0, xmm0 + .loop: + movaps xmm1, [v1q+offsetq] + mulps xmm1, [v2q+offsetq] + addps xmm0, xmm1 + add offsetq, 16 + js .loop + movhlps xmm1, xmm0 + addps xmm0, xmm1 + movss xmm1, xmm0 + shufps xmm0, xmm0, 1 + addss xmm0, xmm1 +%ifndef ARCH_X86_64 + movd r0m, xmm0 + fld dword r0m +%endif + RET diff --git a/plugins/ffap/ffap.c b/plugins/ffap/ffap.c index 0b1e61d9..ccfa2b2d 100644 --- a/plugins/ffap/ffap.c +++ b/plugins/ffap/ffap.c @@ -41,7 +41,7 @@ #ifdef TARGET_ANDROID int posix_memalign (void **memptr, size_t alignment, size_t size) { - *memptr = malloc (size); + *memptr = memalign (alignment, size); return *memptr ? 0 : -1; } #endif @@ -1275,111 +1275,20 @@ typedef int x86_reg; typedef struct { uint64_t a, b; } xmm_reg; #define DECLARE_ALIGNED(n,t,v) t v __attribute__ ((aligned (n))) #define DECLARE_ALIGNED_16(t, v) DECLARE_ALIGNED(16, t, v) -static int32_t scalarproduct_int16_sse2 (int16_t * v1, int16_t * v2, int order, int shift) -{ - int res = 0; - DECLARE_ALIGNED_16(xmm_reg, sh); - x86_reg o = -(order << 1); - - v1 += order; - v2 += order; - sh.a = shift; - __asm__ volatile( - "pxor %%xmm7, %%xmm7 \n\t" - "1: \n\t" - "movdqu (%0,%3), %%xmm0 \n\t" - "movdqu 16(%0,%3), %%xmm1 \n\t" - "pmaddwd (%1,%3), %%xmm0 \n\t" - "pmaddwd 16(%1,%3), %%xmm1 \n\t" - "paddd %%xmm0, %%xmm7 \n\t" - "paddd %%xmm1, %%xmm7 \n\t" - "add $32, %3 \n\t" - "js 1b \n\t" - "movhlps %%xmm7, %%xmm2 \n\t" - "paddd %%xmm2, %%xmm7 \n\t" - "psrad %4, %%xmm7 \n\t" - "pshuflw $0x4E, %%xmm7,%%xmm2 \n\t" - "paddd %%xmm2, %%xmm7 \n\t" - "movd %%xmm7, %2 \n\t" - : "+r"(v1), "+r"(v2), "=r"(res), "+r"(o) - : "m"(sh) - ); - return res; -} -static void add_int16_sse2(int16_t * v1, int16_t * v2, int order) -{ - x86_reg o = -(order << 1); - v1 += order; - v2 += order; - __asm__ volatile( - "1: \n\t" - "movdqu (%1,%2), %%xmm0 \n\t" - "movdqu 16(%1,%2), %%xmm1 \n\t" - "paddw (%0,%2), %%xmm0 \n\t" - "paddw 16(%0,%2), %%xmm1 \n\t" - "movdqa %%xmm0, (%0,%2) \n\t" - "movdqa %%xmm1, 16(%0,%2) \n\t" - "add $32, %2 \n\t" - "js 1b \n\t" - : "+r"(v1), "+r"(v2), "+r"(o) - ); -} - -static void sub_int16_sse2(int16_t * v1, int16_t * v2, int order) -{ - x86_reg o = -(order << 1); - v1 += order; - v2 += order; - __asm__ volatile( - "1: \n\t" - "movdqa (%0,%2), %%xmm0 \n\t" - "movdqa 16(%0,%2), %%xmm2 \n\t" - "movdqu (%1,%2), %%xmm1 \n\t" - "movdqu 16(%1,%2), %%xmm3 \n\t" - "psubw %%xmm1, %%xmm0 \n\t" - "psubw %%xmm3, %%xmm2 \n\t" - "movdqa %%xmm0, (%0,%2) \n\t" - "movdqa %%xmm2, 16(%0,%2) \n\t" - "add $32, %2 \n\t" - "js 1b \n\t" - : "+r"(v1), "+r"(v2), "+r"(o) - ); -} #endif -static int32_t -scalarproduct_int16_c(int16_t * v1, int16_t * v2, int order, int shift) +static int32_t scalarproduct_and_madd_int16_c(int16_t *v1, const int16_t *v2, const int16_t *v3, int order, int mul) { int res = 0; - - while (order--) - res += (*v1++ * *v2++) >> shift; - - return res; -} - -static void -add_int16_c (int16_t *v1/*align 16*/, int16_t *v2, int len) { - while (len--) { - *v1++ += *v2++; - } -} - -static void -sub_int16_c (int16_t *v1/*align 16*/, int16_t *v2, int len) { - while (len--) { - *v1++ -= *v2++; + while (order--) { + res += *v1 * *v2++; + *v1++ += mul * *v3++; } + return res; } static int32_t -(*scalarproduct_int16)(int16_t * v1, int16_t * v2, int order, int shift); - -static void -(*add_int16) (int16_t *v1/*align 16*/, int16_t *v2, int len); - -static void -(*sub_int16) (int16_t *v1/*align 16*/, int16_t *v2, int len); +(*scalarproduct_and_madd_int16)(int16_t *v1, const int16_t *v2, const int16_t *v3, int order, int mul); static inline int16_t clip_int16(int a) { @@ -1412,15 +1321,8 @@ static inline void do_apply_filter(APEContext * ctx, int version, APEFilter *f, int absres; while (count--) { - /* round fixedpoint scalar product */ - res = (scalarproduct_int16(f->delay - order, f->coeffs, order, 0) + (1 << (fracbits - 1))) >> fracbits; - - - if (*data < 0) - add_int16(f->coeffs, f->adaptcoeffs - order, order); - else if (*data > 0) - sub_int16(f->coeffs, f->adaptcoeffs - order, order); - + res = scalarproduct_and_madd_int16(f->coeffs, f->delay - order, f->adaptcoeffs - order, order, APESIGN(*data)); + res = (res + (1 << (fracbits - 1))) >> fracbits; res += *data; *data++ = res; @@ -2002,6 +1904,8 @@ static DB_decoder_t plugin = { #if HAVE_SSE2 && !ARCH_UNKNOWN +int32_t ff_scalarproduct_and_madd_int16_sse2(int16_t *v1, const int16_t *v2, const int16_t *v3, int order, int mul); + #define FF_MM_MMX 0x0001 ///< standard MMX #define FF_MM_3DNOW 0x0004 ///< AMD 3DNOW #define FF_MM_MMX2 0x0002 ///< SSE integer functions or AMD MMX ext @@ -2103,29 +2007,32 @@ int mm_support(void) } #endif +#if ARCH_ARM +int32_t EXTERN_ASMff_scalarproduct_int16_neon(int16_t *v1, int16_t *v2, int len, + int shift); +int32_t EXTERN_ASMff_scalarproduct_and_madd_int16_neon(int16_t *v1, const int16_t *v2, const int16_t *v3, int order, int mul); + +#endif + DB_plugin_t * ffap_load (DB_functions_t *api) { // detect sse2 -#if HAVE_SSE2 && !ARCH_UNKNOWN +#if ARCH_ARM + scalarproduct_and_madd_int16 = EXTERN_ASMff_scalarproduct_and_madd_int16_neon; +#elif HAVE_SSE2 && !ARCH_UNKNOWN trace ("ffap: was compiled with sse2 support\n"); int mm_flags = mm_support (); if (mm_flags & FF_MM_SSE2) { trace ("ffap: sse2 support detected\n"); - scalarproduct_int16 = scalarproduct_int16_sse2; - add_int16 = add_int16_sse2; - sub_int16 = sub_int16_sse2; + scalarproduct_and_madd_int16 = ff_scalarproduct_and_madd_int16_sse2; } else { trace ("ffap: sse2 is not supported by CPU\n"); - scalarproduct_int16 = scalarproduct_int16_c; - add_int16 = add_int16_c; - sub_int16 = sub_int16_c; + scalarproduct_and_madd_int16 = scalarproduct_and_madd_int16_c; } #else - trace ("ffap: sse2 support was not compiled in\n"); - scalarproduct_int16 = scalarproduct_int16_c; - add_int16 = add_int16_c; - sub_int16 = sub_int16_c; +// trace ("ffap: sse2 support was not compiled in\n"); + scalarproduct_and_madd_int16 = scalarproduct_and_madd_int16_c; #endif deadbeef = api; return DB_PLUGIN (&plugin); diff --git a/plugins/ffap/int_neon.S b/plugins/ffap/int_neon.S new file mode 100644 index 00000000..e8023e06 --- /dev/null +++ b/plugins/ffap/int_neon.S @@ -0,0 +1,118 @@ +/* + * ARM NEON optimised integer operations + * Copyright (c) 2009 Kostya Shishkov + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "asm.S" + + preserve8 + .fpu neon + .text + +function ff_scalarproduct_int16_neon, export=1 + vmov.i16 q0, #0 + vmov.i16 q1, #0 + vmov.i16 q2, #0 + vmov.i16 q3, #0 + negs r3, r3 + beq 2f + + vdup.s32 q12, r3 +1: vld1.16 {d16-d17}, [r0]! + vld1.16 {d20-d21}, [r1,:128]! + vmull.s16 q12, d16, d20 + vld1.16 {d18-d19}, [r0]! + vmull.s16 q13, d17, d21 + vld1.16 {d22-d23}, [r1,:128]! + vmull.s16 q14, d18, d22 + vmull.s16 q15, d19, d23 + vshl.s32 q8, q12, q12 + vshl.s32 q9, q13, q12 + vadd.s32 q0, q0, q8 + vshl.s32 q10, q14, q12 + vadd.s32 q1, q1, q9 + vshl.s32 q11, q15, q12 + vadd.s32 q2, q2, q10 + vadd.s32 q3, q3, q11 + subs r2, r2, #16 + bne 1b + b 3f + +2: vld1.16 {d16-d17}, [r0]! + vld1.16 {d20-d21}, [r1,:128]! + vmlal.s16 q0, d16, d20 + vld1.16 {d18-d19}, [r0]! + vmlal.s16 q1, d17, d21 + vld1.16 {d22-d23}, [r1,:128]! + vmlal.s16 q2, d18, d22 + vmlal.s16 q3, d19, d23 + subs r2, r2, #16 + bne 2b + +3: vpadd.s32 d16, d0, d1 + vpadd.s32 d17, d2, d3 + vpadd.s32 d10, d4, d5 + vpadd.s32 d11, d6, d7 + vpadd.s32 d0, d16, d17 + vpadd.s32 d1, d10, d11 + vpadd.s32 d2, d0, d1 + vpaddl.s32 d3, d2 + vmov.32 r0, d3[0] + bx lr +endfunc + +@ scalarproduct_and_madd_int16(/*aligned*/v0,v1,v2,order,mul) +function ff_scalarproduct_and_madd_int16_neon, export=1 + vld1.16 {d28[],d29[]}, [sp] + vmov.i16 q0, #0 + vmov.i16 q1, #0 + vmov.i16 q2, #0 + vmov.i16 q3, #0 + mov r12, r0 + +1: vld1.16 {d16-d17}, [r0,:128]! + vld1.16 {d18-d19}, [r1]! + vld1.16 {d20-d21}, [r2]! + vld1.16 {d22-d23}, [r0,:128]! + vld1.16 {d24-d25}, [r1]! + vld1.16 {d26-d27}, [r2]! + vmul.s16 q10, q10, q14 + vmul.s16 q13, q13, q14 + vmlal.s16 q0, d16, d18 + vmlal.s16 q1, d17, d19 + vadd.s16 q10, q8, q10 + vadd.s16 q13, q11, q13 + vmlal.s16 q2, d22, d24 + vmlal.s16 q3, d23, d25 + vst1.16 {q10}, [r12,:128]! + subs r3, r3, #16 + vst1.16 {q13}, [r12,:128]! + bne 1b + + vpadd.s32 d16, d0, d1 + vpadd.s32 d17, d2, d3 + vpadd.s32 d10, d4, d5 + vpadd.s32 d11, d6, d7 + vpadd.s32 d0, d16, d17 + vpadd.s32 d1, d10, d11 + vpadd.s32 d2, d0, d1 + vpaddl.s32 d3, d2 + vmov.32 r0, d3[0] + bx lr +endfunc diff --git a/plugins/ffap/x86inc.asm b/plugins/ffap/x86inc.asm new file mode 100644 index 00000000..c29ef3ee --- /dev/null +++ b/plugins/ffap/x86inc.asm @@ -0,0 +1,625 @@ +;***************************************************************************** +;* x86inc.asm +;***************************************************************************** +;* Copyright (C) 2005-2008 Loren Merritt <lorenm@u.washington.edu> +;* +;* This file is part of FFmpeg. +;* +;* FFmpeg is free software; you can redistribute it and/or +;* modify it under the terms of the GNU Lesser General Public +;* License as published by the Free Software Foundation; either +;* version 2.1 of the License, or (at your option) any later version. +;* +;* FFmpeg 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 +;* Lesser General Public License for more details. +;* +;* You should have received a copy of the GNU Lesser General Public +;* License along with FFmpeg; if not, write to the Free Software +;* 51, Inc., Foundation Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +;***************************************************************************** + +%ifdef ARCH_X86_64 + %ifidn __OUTPUT_FORMAT__,win32 + %define WIN64 + %else + %define UNIX64 + %endif +%endif + +; FIXME: All of the 64bit asm functions that take a stride as an argument +; via register, assume that the high dword of that register is filled with 0. +; This is true in practice (since we never do any 64bit arithmetic on strides, +; and x264's strides are all positive), but is not guaranteed by the ABI. + +; Name of the .rodata section. +; Kludge: Something on OS X fails to align .rodata even given an align attribute, +; so use a different read-only section. +%macro SECTION_RODATA 0-1 16 + %ifidn __OUTPUT_FORMAT__,macho64 + SECTION .text align=%1 + %elifidn __OUTPUT_FORMAT__,macho + SECTION .text align=%1 + fakegot: + %else + SECTION .rodata align=%1 + %endif +%endmacro + +; PIC support macros. +; x86_64 can't fit 64bit address literals in most instruction types, +; so shared objects (under the assumption that they might be anywhere +; in memory) must use an address mode that does fit. +; So all accesses to global variables must use this macro, e.g. +; mov eax, [foo GLOBAL] +; instead of +; mov eax, [foo] +; +; x86_32 doesn't require PIC. +; Some distros prefer shared objects to be PIC, but nothing breaks if +; the code contains a few textrels, so we'll skip that complexity. + +%ifdef WIN64 + %define PIC +%elifndef ARCH_X86_64 + %undef PIC +%endif +%ifdef PIC + %define GLOBAL wrt rip +%else + %define GLOBAL +%endif + +; Macros to eliminate most code duplication between x86_32 and x86_64: +; Currently this works only for leaf functions which load all their arguments +; into registers at the start, and make no other use of the stack. Luckily that +; covers most of x264's asm. + +; PROLOGUE: +; %1 = number of arguments. loads them from stack if needed. +; %2 = number of registers used. pushes callee-saved regs if needed. +; %3 = number of xmm registers used. pushes callee-saved xmm regs if needed. +; %4 = list of names to define to registers +; PROLOGUE can also be invoked by adding the same options to cglobal + +; e.g. +; cglobal foo, 2,3,0, dst, src, tmp +; declares a function (foo), taking two args (dst and src) and one local variable (tmp) + +; TODO Some functions can use some args directly from the stack. If they're the +; last args then you can just not declare them, but if they're in the middle +; we need more flexible macro. + +; RET: +; Pops anything that was pushed by PROLOGUE + +; REP_RET: +; Same, but if it doesn't pop anything it becomes a 2-byte ret, for athlons +; which are slow when a normal ret follows a branch. + +; registers: +; rN and rNq are the native-size register holding function argument N +; rNd, rNw, rNb are dword, word, and byte size +; rNm is the original location of arg N (a register or on the stack), dword +; rNmp is native size + +%macro DECLARE_REG 6 + %define r%1q %2 + %define r%1d %3 + %define r%1w %4 + %define r%1b %5 + %define r%1m %6 + %ifid %6 ; i.e. it's a register + %define r%1mp %2 + %elifdef ARCH_X86_64 ; memory + %define r%1mp qword %6 + %else + %define r%1mp dword %6 + %endif + %define r%1 %2 +%endmacro + +%macro DECLARE_REG_SIZE 2 + %define r%1q r%1 + %define e%1q r%1 + %define r%1d e%1 + %define e%1d e%1 + %define r%1w %1 + %define e%1w %1 + %define r%1b %2 + %define e%1b %2 +%ifndef ARCH_X86_64 + %define r%1 e%1 +%endif +%endmacro + +DECLARE_REG_SIZE ax, al +DECLARE_REG_SIZE bx, bl +DECLARE_REG_SIZE cx, cl +DECLARE_REG_SIZE dx, dl +DECLARE_REG_SIZE si, sil +DECLARE_REG_SIZE di, dil +DECLARE_REG_SIZE bp, bpl + +; t# defines for when per-arch register allocation is more complex than just function arguments + +%macro DECLARE_REG_TMP 1-* + %assign %%i 0 + %rep %0 + CAT_XDEFINE t, %%i, r%1 + %assign %%i %%i+1 + %rotate 1 + %endrep +%endmacro + +%macro DECLARE_REG_TMP_SIZE 0-* + %rep %0 + %define t%1q t%1 %+ q + %define t%1d t%1 %+ d + %define t%1w t%1 %+ w + %define t%1b t%1 %+ b + %rotate 1 + %endrep +%endmacro + +DECLARE_REG_TMP_SIZE 0,1,2,3,4,5,6,7 + +%ifdef ARCH_X86_64 + %define gprsize 8 +%else + %define gprsize 4 +%endif + +%macro PUSH 1 + push %1 + %assign stack_offset stack_offset+gprsize +%endmacro + +%macro POP 1 + pop %1 + %assign stack_offset stack_offset-gprsize +%endmacro + +%macro SUB 2 + sub %1, %2 + %ifidn %1, rsp + %assign stack_offset stack_offset+(%2) + %endif +%endmacro + +%macro ADD 2 + add %1, %2 + %ifidn %1, rsp + %assign stack_offset stack_offset-(%2) + %endif +%endmacro + +%macro movifnidn 2 + %ifnidn %1, %2 + mov %1, %2 + %endif +%endmacro + +%macro movsxdifnidn 2 + %ifnidn %1, %2 + movsxd %1, %2 + %endif +%endmacro + +%macro ASSERT 1 + %if (%1) == 0 + %error assert failed + %endif +%endmacro + +%macro DEFINE_ARGS 0-* + %ifdef n_arg_names + %assign %%i 0 + %rep n_arg_names + CAT_UNDEF arg_name %+ %%i, q + CAT_UNDEF arg_name %+ %%i, d + CAT_UNDEF arg_name %+ %%i, w + CAT_UNDEF arg_name %+ %%i, b + CAT_UNDEF arg_name %+ %%i, m + CAT_UNDEF arg_name, %%i + %assign %%i %%i+1 + %endrep + %endif + + %assign %%i 0 + %rep %0 + %xdefine %1q r %+ %%i %+ q + %xdefine %1d r %+ %%i %+ d + %xdefine %1w r %+ %%i %+ w + %xdefine %1b r %+ %%i %+ b + %xdefine %1m r %+ %%i %+ m + CAT_XDEFINE arg_name, %%i, %1 + %assign %%i %%i+1 + %rotate 1 + %endrep + %assign n_arg_names %%i +%endmacro + +%ifdef WIN64 ; Windows x64 ;================================================= + +DECLARE_REG 0, rcx, ecx, cx, cl, ecx +DECLARE_REG 1, rdx, edx, dx, dl, edx +DECLARE_REG 2, r8, r8d, r8w, r8b, r8d +DECLARE_REG 3, r9, r9d, r9w, r9b, r9d +DECLARE_REG 4, rdi, edi, di, dil, [rsp + stack_offset + 40] +DECLARE_REG 5, rsi, esi, si, sil, [rsp + stack_offset + 48] +DECLARE_REG 6, rax, eax, ax, al, [rsp + stack_offset + 56] +%define r7m [rsp + stack_offset + 64] +%define r8m [rsp + stack_offset + 72] + +%macro LOAD_IF_USED 2 ; reg_id, number_of_args + %if %1 < %2 + mov r%1, [rsp + stack_offset + 8 + %1*8] + %endif +%endmacro + +%macro PROLOGUE 2-4+ ; #args, #regs, #xmm_regs, arg_names... + ASSERT %2 >= %1 + %assign regs_used %2 + ASSERT regs_used <= 7 + %if %0 > 2 + %assign xmm_regs_used %3 + %else + %assign xmm_regs_used 0 + %endif + ASSERT xmm_regs_used <= 16 + %if regs_used > 4 + push r4 + push r5 + %assign stack_offset stack_offset+16 + %endif + %if xmm_regs_used > 6 + sub rsp, (xmm_regs_used-6)*16+16 + %assign stack_offset stack_offset+(xmm_regs_used-6)*16+16 + %assign %%i xmm_regs_used + %rep (xmm_regs_used-6) + %assign %%i %%i-1 + movdqa [rsp + (%%i-6)*16+8], xmm %+ %%i + %endrep + %endif + LOAD_IF_USED 4, %1 + LOAD_IF_USED 5, %1 + LOAD_IF_USED 6, %1 + DEFINE_ARGS %4 +%endmacro + +%macro RESTORE_XMM_INTERNAL 1 + %if xmm_regs_used > 6 + %assign %%i xmm_regs_used + %rep (xmm_regs_used-6) + %assign %%i %%i-1 + movdqa xmm %+ %%i, [%1 + (%%i-6)*16+8] + %endrep + add %1, (xmm_regs_used-6)*16+16 + %endif +%endmacro + +%macro RESTORE_XMM 1 + RESTORE_XMM_INTERNAL %1 + %assign stack_offset stack_offset-(xmm_regs_used-6)*16+16 + %assign xmm_regs_used 0 +%endmacro + +%macro RET 0 + RESTORE_XMM_INTERNAL rsp + %if regs_used > 4 + pop r5 + pop r4 + %endif + ret +%endmacro + +%macro REP_RET 0 + %if regs_used > 4 || xmm_regs_used > 6 + RET + %else + rep ret + %endif +%endmacro + +%elifdef ARCH_X86_64 ; *nix x64 ;============================================= + +DECLARE_REG 0, rdi, edi, di, dil, edi +DECLARE_REG 1, rsi, esi, si, sil, esi +DECLARE_REG 2, rdx, edx, dx, dl, edx +DECLARE_REG 3, rcx, ecx, cx, cl, ecx +DECLARE_REG 4, r8, r8d, r8w, r8b, r8d +DECLARE_REG 5, r9, r9d, r9w, r9b, r9d +DECLARE_REG 6, rax, eax, ax, al, [rsp + stack_offset + 8] +%define r7m [rsp + stack_offset + 16] +%define r8m [rsp + stack_offset + 24] + +%macro LOAD_IF_USED 2 ; reg_id, number_of_args + %if %1 < %2 + mov r%1, [rsp - 40 + %1*8] + %endif +%endmacro + +%macro PROLOGUE 2-4+ ; #args, #regs, #xmm_regs, arg_names... + ASSERT %2 >= %1 + ASSERT %2 <= 7 + LOAD_IF_USED 6, %1 + DEFINE_ARGS %4 +%endmacro + +%macro RET 0 + ret +%endmacro + +%macro REP_RET 0 + rep ret +%endmacro + +%else ; X86_32 ;============================================================== + +DECLARE_REG 0, eax, eax, ax, al, [esp + stack_offset + 4] +DECLARE_REG 1, ecx, ecx, cx, cl, [esp + stack_offset + 8] +DECLARE_REG 2, edx, edx, dx, dl, [esp + stack_offset + 12] +DECLARE_REG 3, ebx, ebx, bx, bl, [esp + stack_offset + 16] +DECLARE_REG 4, esi, esi, si, null, [esp + stack_offset + 20] +DECLARE_REG 5, edi, edi, di, null, [esp + stack_offset + 24] +DECLARE_REG 6, ebp, ebp, bp, null, [esp + stack_offset + 28] +%define r7m [esp + stack_offset + 32] +%define r8m [esp + stack_offset + 36] +%define rsp esp + +%macro PUSH_IF_USED 1 ; reg_id + %if %1 < regs_used + push r%1 + %assign stack_offset stack_offset+4 + %endif +%endmacro + +%macro POP_IF_USED 1 ; reg_id + %if %1 < regs_used + pop r%1 + %endif +%endmacro + +%macro LOAD_IF_USED 2 ; reg_id, number_of_args + %if %1 < %2 + mov r%1, [esp + stack_offset + 4 + %1*4] + %endif +%endmacro + +%macro PROLOGUE 2-4+ ; #args, #regs, arg_names... + ASSERT %2 >= %1 + %assign regs_used %2 + ASSERT regs_used <= 7 + PUSH_IF_USED 3 + PUSH_IF_USED 4 + PUSH_IF_USED 5 + PUSH_IF_USED 6 + LOAD_IF_USED 0, %1 + LOAD_IF_USED 1, %1 + LOAD_IF_USED 2, %1 + LOAD_IF_USED 3, %1 + LOAD_IF_USED 4, %1 + LOAD_IF_USED 5, %1 + LOAD_IF_USED 6, %1 + DEFINE_ARGS %4 +%endmacro + +%macro RET 0 + POP_IF_USED 6 + POP_IF_USED 5 + POP_IF_USED 4 + POP_IF_USED 3 + ret +%endmacro + +%macro REP_RET 0 + %if regs_used > 3 + RET + %else + rep ret + %endif +%endmacro + +%endif ;====================================================================== + + + +;============================================================================= +; arch-independent part +;============================================================================= + +%assign function_align 16 + +; Symbol prefix for C linkage +%macro cglobal 1-2+ + %xdefine %1 ff_%1 + %ifdef PREFIX + %xdefine %1 _ %+ %1 + %endif + %xdefine %1.skip_prologue %1 %+ .skip_prologue + %ifidn __OUTPUT_FORMAT__,elf + global %1:function hidden + %else + global %1 + %endif + align function_align + %1: + RESET_MM_PERMUTATION ; not really needed, but makes disassembly somewhat nicer + %assign stack_offset 0 + %if %0 > 1 + PROLOGUE %2 + %endif +%endmacro + +%macro cextern 1 + %ifdef PREFIX + %xdefine %1 _%1 + %endif + extern %1 +%endmacro + +; This is needed for ELF, otherwise the GNU linker assumes the stack is +; executable by default. +%ifidn __OUTPUT_FORMAT__,elf +SECTION .note.GNU-stack noalloc noexec nowrite progbits +%endif + +%assign FENC_STRIDE 16 +%assign FDEC_STRIDE 32 + +; merge mmx and sse* + +%macro CAT_XDEFINE 3 + %xdefine %1%2 %3 +%endmacro + +%macro CAT_UNDEF 2 + %undef %1%2 +%endmacro + +%macro INIT_MMX 0 + %define RESET_MM_PERMUTATION INIT_MMX + %define mmsize 8 + %define num_mmregs 8 + %define mova movq + %define movu movq + %define movh movd + %define movnt movntq + %assign %%i 0 + %rep 8 + CAT_XDEFINE m, %%i, mm %+ %%i + CAT_XDEFINE nmm, %%i, %%i + %assign %%i %%i+1 + %endrep + %rep 8 + CAT_UNDEF m, %%i + CAT_UNDEF nmm, %%i + %assign %%i %%i+1 + %endrep +%endmacro + +%macro INIT_XMM 0 + %define RESET_MM_PERMUTATION INIT_XMM + %define mmsize 16 + %define num_mmregs 8 + %ifdef ARCH_X86_64 + %define num_mmregs 16 + %endif + %define mova movdqa + %define movu movdqu + %define movh movq + %define movnt movntdq + %assign %%i 0 + %rep num_mmregs + CAT_XDEFINE m, %%i, xmm %+ %%i + CAT_XDEFINE nxmm, %%i, %%i + %assign %%i %%i+1 + %endrep +%endmacro + +INIT_MMX + +; I often want to use macros that permute their arguments. e.g. there's no +; efficient way to implement butterfly or transpose or dct without swapping some +; arguments. +; +; I would like to not have to manually keep track of the permutations: +; If I insert a permutation in the middle of a function, it should automatically +; change everything that follows. For more complex macros I may also have multiple +; implementations, e.g. the SSE2 and SSSE3 versions may have different permutations. +; +; Hence these macros. Insert a PERMUTE or some SWAPs at the end of a macro that +; permutes its arguments. It's equivalent to exchanging the contents of the +; registers, except that this way you exchange the register names instead, so it +; doesn't cost any cycles. + +%macro PERMUTE 2-* ; takes a list of pairs to swap +%rep %0/2 + %xdefine tmp%2 m%2 + %xdefine ntmp%2 nm%2 + %rotate 2 +%endrep +%rep %0/2 + %xdefine m%1 tmp%2 + %xdefine nm%1 ntmp%2 + %undef tmp%2 + %undef ntmp%2 + %rotate 2 +%endrep +%endmacro + +%macro SWAP 2-* ; swaps a single chain (sometimes more concise than pairs) +%rep %0-1 +%ifdef m%1 + %xdefine tmp m%1 + %xdefine m%1 m%2 + %xdefine m%2 tmp + CAT_XDEFINE n, m%1, %1 + CAT_XDEFINE n, m%2, %2 +%else + ; If we were called as "SWAP m0,m1" rather than "SWAP 0,1" infer the original numbers here. + ; Be careful using this mode in nested macros though, as in some cases there may be + ; other copies of m# that have already been dereferenced and don't get updated correctly. + %xdefine %%n1 n %+ %1 + %xdefine %%n2 n %+ %2 + %xdefine tmp m %+ %%n1 + CAT_XDEFINE m, %%n1, m %+ %%n2 + CAT_XDEFINE m, %%n2, tmp + CAT_XDEFINE n, m %+ %%n1, %%n1 + CAT_XDEFINE n, m %+ %%n2, %%n2 +%endif + %undef tmp + %rotate 1 +%endrep +%endmacro + +%macro SAVE_MM_PERMUTATION 1 + %assign %%i 0 + %rep num_mmregs + CAT_XDEFINE %1_m, %%i, m %+ %%i + %assign %%i %%i+1 + %endrep +%endmacro + +%macro LOAD_MM_PERMUTATION 1 + %assign %%i 0 + %rep num_mmregs + CAT_XDEFINE m, %%i, %1_m %+ %%i + CAT_XDEFINE n, m %+ %%i, %%i + %assign %%i %%i+1 + %endrep +%endmacro + +%macro call 1 + call %1 + %ifdef %1_m0 + LOAD_MM_PERMUTATION %1 + %endif +%endmacro + +;Substitutions that reduce instruction size but are functionally equivalent +%macro add 2 + %ifnum %2 + %if %2==128 + sub %1, -128 + %else + add %1, %2 + %endif + %else + add %1, %2 + %endif +%endmacro + +%macro sub 2 + %ifnum %2 + %if %2==128 + add %1, -128 + %else + sub %1, %2 + %endif + %else + sub %1, %2 + %endif +%endmacro diff --git a/plugins/gtkui/Makefile.am b/plugins/gtkui/Makefile.am index 329f14b2..7c82d4e5 100644 --- a/plugins/gtkui/Makefile.am +++ b/plugins/gtkui/Makefile.am @@ -36,7 +36,8 @@ GTKUI_SOURCES = gtkui.c gtkui.h\ dspconfig.c dspconfig.h\ tagwritersettings.c tagwritersettings.h\ wingeom.c wingeom.h\ - pluginconf.h + pluginconf.h\ + widgets.c widgets.h sdkdir = $(pkgincludedir) sdk_HEADERS = gtkui_api.h diff --git a/plugins/gtkui/callbacks.c b/plugins/gtkui/callbacks.c index 4fdc73c3..268028e2 100644 --- a/plugins/gtkui/callbacks.c +++ b/plugins/gtkui/callbacks.c @@ -282,9 +282,8 @@ on_select_all1_activate (GtkMenuItem *menuitem, gpointer user_data) { deadbeef->pl_select_all (); - DdbListview *pl = DDB_LISTVIEW (lookup_widget (mainwin, "playlist")); - ddb_listview_refresh (pl, DDB_REFRESH_LIST); - pl = DDB_LISTVIEW (lookup_widget (searchwin, "searchlist")); + deadbeef->sendmessage (DB_EV_PLAYLISTCHANGED, 0, 0, 0); + DdbListview *pl = DDB_LISTVIEW (lookup_widget (searchwin, "searchlist")); if (pl) { ddb_listview_refresh (pl, DDB_REFRESH_LIST); } @@ -358,9 +357,6 @@ on_mainwin_key_press_event (GtkWidget *widget, deadbeef->conf_set_int ("playlist.current", pl); } } - else { - ddb_listview_handle_keypress (DDB_LISTVIEW (lookup_widget (mainwin, "playlist")), event->keyval, event->state); - } return FALSE; } @@ -837,6 +833,8 @@ void on_toggle_column_headers_activate (GtkMenuItem *menuitem, gpointer user_data) { + // FIXME! + return; GtkWidget *playlist = lookup_widget (mainwin, "playlist"); if (playlist) { if (!gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM (menuitem))) { @@ -902,6 +900,8 @@ void on_toggle_tabs (GtkMenuItem *menuitem, gpointer user_data) { + // FIXME! + return; GtkWidget *ts = lookup_widget (mainwin, "tabstrip"); if (!gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM (menuitem))) { deadbeef->conf_set_int ("gtkui.tabs.visible", 0); @@ -945,9 +945,8 @@ on_deselect_all1_activate (GtkMenuItem *menuitem, it = next; } deadbeef->pl_unlock (); - DdbListview *pl = DDB_LISTVIEW (lookup_widget (mainwin, "playlist")); - ddb_listview_refresh (pl, DDB_REFRESH_LIST); - pl = DDB_LISTVIEW (lookup_widget (searchwin, "searchlist")); + deadbeef->sendmessage (DB_EV_PLAYLISTCHANGED, 0, 0, 0); + DdbListview *pl = DDB_LISTVIEW (lookup_widget (searchwin, "searchlist")); if (pl) { ddb_listview_refresh (pl, DDB_REFRESH_LIST); } @@ -972,8 +971,7 @@ on_invert_selection1_activate (GtkMenuItem *menuitem, it = next; } deadbeef->pl_unlock (); - DdbListview *pl = DDB_LISTVIEW (lookup_widget (mainwin, "playlist")); - ddb_listview_refresh (pl, DDB_REFRESH_LIST); + deadbeef->sendmessage (DB_EV_PLAYLISTCHANGED, 0, 0, 0); } @@ -1132,9 +1130,7 @@ on_sort_by_title_activate (GtkMenuItem *menuitem, deadbeef->plt_sort (plt, PL_MAIN, -1, "%t", 1); deadbeef->plt_unref (plt); - DdbListview *pl = DDB_LISTVIEW (lookup_widget (mainwin, "playlist")); - ddb_listview_clear_sort (pl); - ddb_listview_refresh (pl, DDB_REFRESH_LIST | DDB_LIST_CHANGED); + deadbeef->sendmessage (DB_EV_PLAYLISTCHANGED, 0, 0, 0); } @@ -1146,9 +1142,7 @@ on_sort_by_track_nr_activate (GtkMenuItem *menuitem, deadbeef->plt_sort (plt, PL_MAIN, -1, "%n", 1); deadbeef->plt_unref (plt); - DdbListview *pl = DDB_LISTVIEW (lookup_widget (mainwin, "playlist")); - ddb_listview_clear_sort (pl); - ddb_listview_refresh (pl, DDB_REFRESH_LIST | DDB_LIST_CHANGED); + deadbeef->sendmessage (DB_EV_PLAYLISTCHANGED, 0, 0, 0); } @@ -1160,9 +1154,7 @@ on_sort_by_album_activate (GtkMenuItem *menuitem, deadbeef->plt_sort (plt, PL_MAIN, -1, "%b", 1); deadbeef->plt_unref (plt); - DdbListview *pl = DDB_LISTVIEW (lookup_widget (mainwin, "playlist")); - ddb_listview_clear_sort (pl); - ddb_listview_refresh (pl, DDB_REFRESH_LIST | DDB_LIST_CHANGED); + deadbeef->sendmessage (DB_EV_PLAYLISTCHANGED, 0, 0, 0); } @@ -1174,9 +1166,7 @@ on_sort_by_artist_activate (GtkMenuItem *menuitem, deadbeef->plt_sort (plt, PL_MAIN, -1, "%a", 1); deadbeef->plt_unref (plt); - DdbListview *pl = DDB_LISTVIEW (lookup_widget (mainwin, "playlist")); - ddb_listview_clear_sort (pl); - ddb_listview_refresh (pl, DDB_REFRESH_LIST | DDB_LIST_CHANGED); + deadbeef->sendmessage (DB_EV_PLAYLISTCHANGED, 0, 0, 0); } @@ -1188,9 +1178,7 @@ on_sort_by_date_activate (GtkMenuItem *menuitem, deadbeef->plt_sort (plt, PL_MAIN, -1, "%y", 1); deadbeef->plt_unref (plt); - DdbListview *pl = DDB_LISTVIEW (lookup_widget (mainwin, "playlist")); - ddb_listview_clear_sort (pl); - ddb_listview_refresh (pl, DDB_REFRESH_LIST | DDB_LIST_CHANGED); + deadbeef->sendmessage (DB_EV_PLAYLISTCHANGED, 0, 0, 0); } @@ -1224,11 +1212,18 @@ on_sort_by_custom_activate (GtkMenuItem *menuitem, deadbeef->plt_sort (plt, PL_MAIN, -1, fmt, order == 0 ? 1 : 0); deadbeef->plt_unref (plt); - DdbListview *pl = DDB_LISTVIEW (lookup_widget (mainwin, "playlist")); - ddb_listview_clear_sort (pl); - ddb_listview_refresh (pl, DDB_REFRESH_LIST | DDB_LIST_CHANGED); + deadbeef->sendmessage (DB_EV_PLAYLISTCHANGED, 0, 0, 0); } gtk_widget_destroy (dlg); dlg = NULL; } + +void +on_design_mode1_activate (GtkMenuItem *menuitem, + gpointer user_data) +{ + gboolean act = gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM (menuitem)); + w_set_design_mode (act ? 1 : 0); +} + diff --git a/plugins/gtkui/callbacks.h b/plugins/gtkui/callbacks.h index fd92b376..1c407678 100644 --- a/plugins/gtkui/callbacks.h +++ b/plugins/gtkui/callbacks.h @@ -1155,3 +1155,7 @@ on_sort_by_custom_activate (GtkMenuItem *menuitem, void on_convert8to16_toggled (GtkToggleButton *togglebutton, gpointer user_data); + +void +on_design_mode1_activate (GtkMenuItem *menuitem, + gpointer user_data); diff --git a/plugins/gtkui/ddblistview.c b/plugins/gtkui/ddblistview.c index b6140456..33d16bff 100644 --- a/plugins/gtkui/ddblistview.c +++ b/plugins/gtkui/ddblistview.c @@ -265,6 +265,14 @@ ddb_listview_motion_notify_event (GtkWidget *widget, GdkEventMotion *event, gpointer user_data); +gboolean +ddb_listview_list_key_press_event (GtkWidget *widget, GdkEventKey *event, gpointer user_data); + +gboolean +ddb_listview_list_focus_in_event (GtkWidget *widget, GdkEvent *event, gpointer user_data); + +gboolean +ddb_listview_list_focus_out_event (GtkWidget *widget, GdkEvent *event, gpointer user_data); static void ddb_listview_class_init(DdbListviewClass *class) @@ -351,7 +359,9 @@ ddb_listview_init(DdbListview *listview) listview->list = gtk_drawing_area_new (); gtk_widget_show (listview->list); gtk_box_pack_start (GTK_BOX (vbox), listview->list, TRUE, TRUE, 0); - gtk_widget_set_events (listview->list, GDK_EXPOSURE_MASK | GDK_POINTER_MOTION_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK); + GTK_WIDGET_SET_FLAGS (listview->list, GTK_CAN_FOCUS); + GTK_WIDGET_SET_FLAGS (listview->list, GTK_CAN_DEFAULT); + gtk_widget_set_events (listview->list, GDK_EXPOSURE_MASK | GDK_POINTER_MOTION_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_FOCUS_CHANGE_MASK); listview->hscrollbar = gtk_hscrollbar_new (GTK_ADJUSTMENT (gtk_adjustment_new (0, 0, 0, 0, 0, 0))); gtk_widget_show (listview->hscrollbar); @@ -396,7 +406,7 @@ ddb_listview_init(DdbListview *listview) g_signal_connect ((gpointer) listview->list, "realize", G_CALLBACK (ddb_listview_list_realize), NULL); - g_signal_connect ((gpointer) listview->list, "button_press_event", + g_signal_connect_after ((gpointer) listview->list, "button_press_event", G_CALLBACK (ddb_listview_list_button_press_event), NULL); g_signal_connect ((gpointer) listview->list, "scroll_event", @@ -435,6 +445,10 @@ ddb_listview_init(DdbListview *listview) g_signal_connect ((gpointer) listview->hscrollbar, "value_changed", G_CALLBACK (ddb_listview_hscroll_value_changed), NULL); + + g_signal_connect ((gpointer)listview->list, "key_press_event", G_CALLBACK (ddb_listview_list_key_press_event), NULL); + g_signal_connect ((gpointer)listview->list, "focus_in_event", G_CALLBACK (ddb_listview_list_focus_in_event), NULL); + g_signal_connect ((gpointer)listview->list, "focus_out_event", G_CALLBACK (ddb_listview_list_focus_out_event), NULL); } GtkWidget * ddb_listview_new() @@ -2563,6 +2577,7 @@ ddb_listview_list_button_press_event (GtkWidget *widget, GdkEventButton *event, gpointer user_data) { + gtk_widget_grab_focus (widget); DdbListview *ps = DDB_LISTVIEW (g_object_get_data (G_OBJECT (widget), "owner")); if (event->button == 1) { ddb_listview_list_mouse1_pressed (ps, event->state, event->x, event->y, event->type); @@ -2604,7 +2619,7 @@ ddb_listview_list_button_press_event (GtkWidget *widget, UNREF (it); } } - return FALSE; + return TRUE; } gboolean @@ -2969,3 +2984,23 @@ ddb_listview_clear_sort (DdbListview *listview) { } gtk_widget_queue_draw (listview->header); } + +gboolean +ddb_listview_list_key_press_event (GtkWidget *widget, GdkEventKey *event, gpointer user_data) { + DdbListview *listview = DDB_LISTVIEW (g_object_get_data (G_OBJECT (widget), "owner")); + ddb_listview_handle_keypress (listview, event->keyval, event->state); + return FALSE; + +} + +gboolean +ddb_listview_list_focus_in_event (GtkWidget *widget, GdkEvent *event, gpointer user_data) { + GTK_WIDGET_SET_FLAGS (widget, GTK_HAS_FOCUS); + return FALSE; +} + +gboolean +ddb_listview_list_focus_out_event (GtkWidget *widget, GdkEvent *event, gpointer user_data) { + GTK_WIDGET_UNSET_FLAGS (widget, GTK_HAS_FOCUS); + return FALSE; +} diff --git a/plugins/gtkui/ddbtabstrip.c b/plugins/gtkui/ddbtabstrip.c index f8f3e6c4..e1882d1e 100644 --- a/plugins/gtkui/ddbtabstrip.c +++ b/plugins/gtkui/ddbtabstrip.c @@ -25,7 +25,7 @@ #include "gtkui.h" #include "interface.h" #include "support.h" -#include "ddblistview.h" +#include "mainplaylist.h" #define GLADE_HOOKUP_OBJECT(component,widget,name) \ g_object_set_data_full (G_OBJECT (component), name, \ @@ -220,7 +220,6 @@ ddb_tabstrip_class_init(DdbTabStripClass *class) widget_class->realize = ddb_tabstrip_realize; widget_class->size_allocate = ddb_tabstrip_size_allocate; widget_class->expose_event = on_tabstrip_expose_event; - widget_class->button_press_event = on_tabstrip_button_press_event; widget_class->button_release_event = on_tabstrip_button_release_event; widget_class->configure_event = on_tabstrip_configure_event; widget_class->motion_notify_event = on_tabstrip_motion_notify_event; @@ -253,8 +252,6 @@ on_tabstrip_drag_data_received (GtkWidget *widget, guint target_type, guint time) { - DdbListview *ps = DDB_LISTVIEW (lookup_widget (mainwin, "playlist")); - gchar *ptr=(char*)data->data; if (target_type == 0) { // uris // this happens when dropped from file manager @@ -262,7 +259,7 @@ on_tabstrip_drag_data_received (GtkWidget *widget, memcpy (mem, ptr, data->length); mem[data->length] = 0; // we don't pass control structure, but there's only one drag-drop view currently - ps->binding->external_drag_n_drop (NULL, mem, data->length); + gtkui_receive_fm_drop (NULL, mem, data->length); } else if (target_type == 1) { uint32_t *d= (uint32_t *)ptr; @@ -271,7 +268,8 @@ on_tabstrip_drag_data_received (GtkWidget *widget, int length = (data->length/4)-1; ddb_playlist_t *p = deadbeef->plt_get_for_idx (plt); if (p) { - ps->binding->drag_n_drop (NULL, p, d, length, drag_context->action == GDK_ACTION_COPY ? 1 : 0); + //ps->binding->drag_n_drop (NULL, p, d, length, drag_context->action == GDK_ACTION_COPY ? 1 : 0); + main_drag_n_drop (NULL, p, d, length, drag_context->action == GDK_ACTION_COPY ? 1 : 0); deadbeef->plt_unref (p); } } @@ -283,16 +281,16 @@ on_tabstrip_drag_leave (GtkWidget *widget, GdkDragContext *drag_context, guint time) { - DdbListview *pl = DDB_LISTVIEW (lookup_widget (mainwin, "playlist")); - ddb_listview_list_drag_leave (pl->list, drag_context, time, NULL); +// DdbListview *pl = DDB_LISTVIEW (lookup_widget (mainwin, "playlist")); +// ddb_listview_list_drag_leave (pl->list, drag_context, time, NULL); } void on_tabstrip_drag_end (GtkWidget *widget, GdkDragContext *drag_context) { - DdbListview *pl = DDB_LISTVIEW (lookup_widget (mainwin, "playlist")); - ddb_listview_list_drag_end (pl->list, drag_context, NULL); +// DdbListview *pl = DDB_LISTVIEW (lookup_widget (mainwin, "playlist")); +// ddb_listview_list_drag_end (pl->list, drag_context, NULL); } GtkWidget * ddb_tabstrip_new() { @@ -309,6 +307,9 @@ ddb_tabstrip_init(DdbTabStrip *tabstrip) tabstrip->dragpt[1] = 0; tabstrip->prev_x = 0; tabstrip->movepos = 0; + g_signal_connect_after ((gpointer) tabstrip, "button_press_event", + G_CALLBACK (on_tabstrip_button_press_event), + NULL); } static int tab_clicked = -1; @@ -713,8 +714,6 @@ on_remove_playlist1_activate (GtkMenuItem *menuitem, { if (tab_clicked != -1) { deadbeef->plt_remove (tab_clicked); - DdbListview *pl = DDB_LISTVIEW (lookup_widget (mainwin, "playlist")); - ddb_listview_refresh (pl, DDB_LIST_CHANGED | DDB_REFRESH_LIST | DDB_REFRESH_VSCROLL); search_refresh (); int playlist = deadbeef->plt_get_curr_idx (); deadbeef->conf_set_int ("playlist.current", playlist); @@ -845,7 +844,7 @@ on_tabstrip_button_press_event(GtkWidget *widget, ts->scroll_direction = -1; ts->scroll_timer = g_timeout_add (300, tabstrip_scroll_cb, ts); } - return FALSE; + return TRUE; } else if (event->x >= widget->allocation.width - arrow_widget_width) { if (event->type == GDK_BUTTON_PRESS) { @@ -853,7 +852,7 @@ on_tabstrip_button_press_event(GtkWidget *widget, ts->scroll_direction = 1; ts->scroll_timer = g_timeout_add (300, tabstrip_scroll_cb, ts); } - return FALSE; + return TRUE; } } if (tab_clicked != -1) { @@ -866,9 +865,9 @@ on_tabstrip_button_press_event(GtkWidget *widget, if (playlist != -1) { gtkui_playlist_set_curr (playlist); } - return FALSE; + return TRUE; } - return FALSE; + return TRUE; } // adjust scroll if clicked tab spans border @@ -904,21 +903,19 @@ on_tabstrip_button_press_event(GtkWidget *widget, if (playlist != -1) { gtkui_playlist_set_curr (playlist); } - return FALSE; + return TRUE; } else if (deadbeef->conf_get_int ("gtkui.mmb_delete_playlist", 1)) { if (tab_clicked != -1) { deadbeef->plt_remove (tab_clicked); // force invalidation of playlist cache - DdbListview *pl = DDB_LISTVIEW (lookup_widget (mainwin, "playlist")); - ddb_listview_refresh (pl, DDB_LIST_CHANGED | DDB_REFRESH_LIST | DDB_REFRESH_VSCROLL); search_refresh (); int playlist = deadbeef->plt_get_curr_idx (); deadbeef->conf_set_int ("playlist.current", playlist); } } } - return FALSE; + return TRUE; } diff --git a/plugins/gtkui/deadbeef.glade b/plugins/gtkui/deadbeef.glade index 73759b65..926fa6ab 100644 --- a/plugins/gtkui/deadbeef.glade +++ b/plugins/gtkui/deadbeef.glade @@ -62,7 +62,7 @@ <accelerator key="O" modifiers="GDK_CONTROL_MASK" signal="activate"/> <child internal-child="image"> - <widget class="GtkImage" id="image555"> + <widget class="GtkImage" id="image563"> <property name="visible">True</property> <property name="stock">gtk-open</property> <property name="icon_size">1</property> @@ -89,7 +89,7 @@ <signal name="activate" handler="on_add_files_activate" last_modification_time="Sat, 04 Jul 2009 13:04:01 GMT"/> <child internal-child="image"> - <widget class="GtkImage" id="image556"> + <widget class="GtkImage" id="image564"> <property name="visible">True</property> <property name="stock">gtk-add</property> <property name="icon_size">1</property> @@ -110,7 +110,7 @@ <signal name="activate" handler="on_add_folders_activate" last_modification_time="Sun, 06 Sep 2009 17:51:40 GMT"/> <child internal-child="image"> - <widget class="GtkImage" id="image557"> + <widget class="GtkImage" id="image565"> <property name="visible">True</property> <property name="stock">gtk-add</property> <property name="icon_size">1</property> @@ -181,7 +181,7 @@ <accelerator key="Q" modifiers="GDK_CONTROL_MASK" signal="activate"/> <child internal-child="image"> - <widget class="GtkImage" id="image558"> + <widget class="GtkImage" id="image566"> <property name="visible">True</property> <property name="stock">gtk-quit</property> <property name="icon_size">1</property> @@ -215,7 +215,7 @@ <signal name="activate" handler="on_clear1_activate" last_modification_time="Sun, 06 Sep 2009 18:30:03 GMT"/> <child internal-child="image"> - <widget class="GtkImage" id="image559"> + <widget class="GtkImage" id="image567"> <property name="visible">True</property> <property name="stock">gtk-clear</property> <property name="icon_size">1</property> @@ -274,7 +274,7 @@ <signal name="activate" handler="on_remove1_activate" last_modification_time="Sun, 06 Sep 2009 18:30:03 GMT"/> <child internal-child="image"> - <widget class="GtkImage" id="image560"> + <widget class="GtkImage" id="image568"> <property name="visible">True</property> <property name="stock">gtk-remove</property> <property name="icon_size">1</property> @@ -444,6 +444,16 @@ <signal name="activate" handler="on_toggle_eq" last_modification_time="Sat, 20 Mar 2010 12:28:50 GMT"/> </widget> </child> + + <child> + <widget class="GtkCheckMenuItem" id="design_mode1"> + <property name="visible">True</property> + <property name="label" translatable="yes">Design mode</property> + <property name="use_underline">True</property> + <property name="active">False</property> + <signal name="activate" handler="on_design_mode1_activate" last_modification_time="Fri, 17 Jun 2011 19:10:50 GMT"/> + </widget> + </child> </widget> </child> </widget> @@ -472,7 +482,7 @@ <property name="visible">True</property> <property name="label" translatable="yes">Linear</property> <property name="use_underline">True</property> - <property name="active">False</property> + <property name="active">True</property> <signal name="activate" handler="on_order_linear_activate" last_modification_time="Sat, 08 Aug 2009 12:26:33 GMT"/> </widget> </child> @@ -482,7 +492,7 @@ <property name="visible">True</property> <property name="label" translatable="yes">Shuffle tracks</property> <property name="use_underline">True</property> - <property name="active">False</property> + <property name="active">True</property> <property name="group">order_linear</property> <signal name="activate" handler="on_order_shuffle_activate" last_modification_time="Fri, 21 Aug 2009 16:46:02 GMT"/> </widget> @@ -493,7 +503,7 @@ <property name="visible">True</property> <property name="label" translatable="yes">Shuffle albums</property> <property name="use_underline">True</property> - <property name="active">False</property> + <property name="active">True</property> <property name="group">order_linear</property> <signal name="activate" handler="on_order_shuffle_albums_activate" last_modification_time="Sun, 12 Dec 2010 18:14:47 GMT"/> </widget> @@ -528,7 +538,7 @@ <property name="visible">True</property> <property name="label" translatable="yes">Loop All</property> <property name="use_underline">True</property> - <property name="active">False</property> + <property name="active">True</property> <signal name="activate" handler="on_loop_all_activate" last_modification_time="Sat, 08 Aug 2009 12:26:33 GMT"/> </widget> </child> @@ -538,7 +548,7 @@ <property name="visible">True</property> <property name="label" translatable="yes">Loop Single Song</property> <property name="use_underline">True</property> - <property name="active">False</property> + <property name="active">True</property> <property name="group">loop_all</property> <signal name="activate" handler="on_loop_single_activate" last_modification_time="Sat, 08 Aug 2009 12:26:33 GMT"/> </widget> @@ -627,7 +637,7 @@ <signal name="activate" handler="on_help1_activate" last_modification_time="Tue, 08 Sep 2009 17:32:06 GMT"/> <child internal-child="image"> - <widget class="GtkImage" id="image561"> + <widget class="GtkImage" id="image569"> <property name="visible">True</property> <property name="stock">gtk-help</property> <property name="icon_size">1</property> @@ -687,7 +697,7 @@ <signal name="activate" handler="on_about1_activate" last_modification_time="Sat, 04 Jul 2009 12:57:58 GMT"/> <child internal-child="image"> - <widget class="GtkImage" id="image562"> + <widget class="GtkImage" id="image570"> <property name="visible">True</property> <property name="stock">gtk-about</property> <property name="icon_size">1</property> @@ -708,7 +718,7 @@ <signal name="activate" handler="on_translators1_activate" last_modification_time="Sun, 19 Sep 2010 13:38:07 GMT"/> <child internal-child="image"> - <widget class="GtkImage" id="image563"> + <widget class="GtkImage" id="image571"> <property name="visible">True</property> <property name="stock">gtk-about</property> <property name="icon_size">1</property> @@ -928,47 +938,6 @@ </child> <child> - <widget class="Custom" id="tabstrip"> - <property name="height_request">24</property> - <property name="visible">True</property> - <property name="creation_function">create_tabstrip_widget</property> - <property name="int1">0</property> - <property name="int2">0</property> - <property name="last_modification_time">Thu, 18 Feb 2010 18:05:36 GMT</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">True</property> - </packing> - </child> - - <child> - <widget class="GtkFrame" id="frame1"> - <property name="border_width">1</property> - <property name="visible">True</property> - <property name="label_xalign">0</property> - <property name="label_yalign">0.5</property> - <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property> - - <child> - <widget class="Custom" id="playlist"> - <property name="visible">True</property> - <property name="creation_function">create_ddb_listview_widget</property> - <property name="int1">0</property> - <property name="int2">0</property> - <property name="last_modification_time">Sat, 13 Feb 2010 20:26:03 GMT</property> - </widget> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - - <child> <widget class="GtkVBox" id="plugins_bottom_vbox"> <property name="visible">True</property> <property name="homogeneous">False</property> @@ -980,8 +949,8 @@ </widget> <packing> <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> + <property name="expand">True</property> + <property name="fill">True</property> </packing> </child> diff --git a/plugins/gtkui/fileman.c b/plugins/gtkui/fileman.c index 8947c821..4b1b6949 100644 --- a/plugins/gtkui/fileman.c +++ b/plugins/gtkui/fileman.c @@ -104,17 +104,15 @@ static void open_files_worker (void *data) { GSList *lst = (GSList *)data; gtkpl_add_files (lst); - gtkui_playlist_changed (); - extern GtkWidget *mainwin; - DdbListview *pl = DDB_LISTVIEW (lookup_widget (mainwin, "playlist")); - ddb_listview_set_cursor (pl, 0); + deadbeef->pl_set_cursor (PL_MAIN, 0); + deadbeef->sendmessage (DB_EV_PLAYLISTCHANGED, 0, 0, 0); deadbeef->sendmessage (DB_EV_PLAY_CURRENT, 0, 1, 0); } void gtkui_open_files (struct _GSList *lst) { deadbeef->pl_clear (); - playlist_refresh (); + deadbeef->sendmessage (DB_EV_PLAYLISTCHANGED, 0, 0, 0); intptr_t tid = deadbeef->thread_start (open_files_worker, lst); deadbeef->thread_detach (tid); @@ -164,13 +162,14 @@ strcopy_special (char *dest, const char *src, int len) { static gboolean set_dnd_cursor_idle (gpointer data) { - DdbListview *listview = DDB_LISTVIEW (lookup_widget (mainwin, "playlist")); if (!data) { - ddb_listview_set_cursor (listview, -1); + deadbeef->pl_set_cursor (PL_MAIN, -1); + deadbeef->sendmessage (DB_EV_PLAYLISTCHANGED, 0, 0, 0); return FALSE; } int cursor = deadbeef->pl_get_idx_of (DB_PLAYITEM (data)); - ddb_listview_set_cursor (listview, cursor); + deadbeef->pl_set_cursor (PL_MAIN, cursor); + deadbeef->sendmessage (DB_EV_PLAYLISTCHANGED, 0, 0, 0); return FALSE; } @@ -182,7 +181,6 @@ gtkpl_add_fm_dropped_files (DB_playItem_t *drop_before, char *ptr, int length) { deadbeef->plt_unref (plt); return; } - DdbListview *pl = DDB_LISTVIEW (lookup_widget (mainwin, "playlist")); DdbListviewIter first = NULL; DdbListviewIter after = NULL; diff --git a/plugins/gtkui/gtkui.c b/plugins/gtkui/gtkui.c index 4dd222b1..aa7da8b7 100644 --- a/plugins/gtkui/gtkui.c +++ b/plugins/gtkui/gtkui.c @@ -29,7 +29,6 @@ #include "../../gettext.h" #include "gtkui.h" #include "ddblistview.h" -#include "mainplaylist.h" #include "search.h" #include "progress.h" #include "interface.h" @@ -47,6 +46,7 @@ #include "pluginconf.h" #include "gtkui_api.h" #include "wingeom.h" +#include "widgets.h" #define trace(...) { fprintf(stderr, __VA_ARGS__); } //#define trace(fmt,...) @@ -337,7 +337,7 @@ activate_cb (gpointer nothing) { } void -redraw_queued_tracks (DdbListview *pl, int list) { +redraw_queued_tracks (DdbListview *pl) { DB_playItem_t *it; int idx = 0; deadbeef->pl_lock (); @@ -352,14 +352,10 @@ redraw_queued_tracks (DdbListview *pl, int list) { deadbeef->pl_unlock (); } -static gboolean -redraw_queued_tracks_cb (gpointer nothing) { - int iconified = gdk_window_get_state(mainwin->window) & GDK_WINDOW_STATE_ICONIFIED; - if (!gtk_widget_get_visible (mainwin) || iconified) { - return FALSE; - } - redraw_queued_tracks (DDB_LISTVIEW (lookup_widget (mainwin, "playlist")), PL_MAIN); - redraw_queued_tracks (DDB_LISTVIEW (lookup_widget (searchwin, "searchlist")), PL_SEARCH); +gboolean +redraw_queued_tracks_cb (gpointer plt) { + DdbListview *list = plt; + redraw_queued_tracks (list); return FALSE; } @@ -376,7 +372,12 @@ gtkpl_songchanged_wrapper (DB_playItem_t *from, DB_playItem_t *to) { } g_idle_add (update_win_title_idle, ft); g_idle_add (redraw_seekbar_cb, NULL); - g_idle_add (redraw_queued_tracks_cb, NULL); + if (searchwin && searchwin->window) { + int iconified = gdk_window_get_state(searchwin->window) & GDK_WINDOW_STATE_ICONIFIED; + if (gtk_widget_get_visible (searchwin) && !iconified) { + g_idle_add (redraw_queued_tracks_cb, DDB_LISTVIEW (lookup_widget (searchwin, "searchlist"))); + } + } } void @@ -415,8 +416,8 @@ trackinfochanged_wrapper (DdbListview *playlist, DB_playItem_t *track, int iter) void gtkui_trackinfochanged (DB_playItem_t *track) { - GtkWidget *playlist = lookup_widget (mainwin, "playlist"); - trackinfochanged_wrapper (DDB_LISTVIEW (playlist), track, PL_MAIN); +// GtkWidget *playlist = lookup_widget (mainwin, "playlist"); +// trackinfochanged_wrapper (DDB_LISTVIEW (playlist), track, PL_MAIN); if (searchwin && gtk_widget_get_visible (searchwin)) { GtkWidget *search = lookup_widget (searchwin, "searchlist"); @@ -441,22 +442,10 @@ trackinfochanged_cb (gpointer data) { return FALSE; } -static gboolean -paused_cb (gpointer nothing) { - DB_playItem_t *curr = deadbeef->streamer_get_playing_track (); - if (curr) { - int idx = deadbeef->pl_get_idx_of (curr); - GtkWidget *playlist = lookup_widget (mainwin, "playlist"); - ddb_listview_draw_row (DDB_LISTVIEW (playlist), idx, (DdbListviewIter)curr); - deadbeef->pl_item_unref (curr); - } - return FALSE; -} - void playlist_refresh (void) { - DdbListview *ps = DDB_LISTVIEW (lookup_widget (mainwin, "playlist")); - ddb_listview_refresh (ps, DDB_REFRESH_LIST | DDB_REFRESH_VSCROLL); +// DdbListview *ps = DDB_LISTVIEW (lookup_widget (mainwin, "playlist")); +// ddb_listview_refresh (ps, DDB_REFRESH_LIST | DDB_REFRESH_VSCROLL); search_refresh (); } @@ -473,26 +462,6 @@ gtkui_playlist_changed (void) { static gboolean playlistswitch_cb (gpointer none) { - GtkWidget *tabstrip = lookup_widget (mainwin, "tabstrip"); - int curr = deadbeef->plt_get_curr_idx (); - char conf[100]; - snprintf (conf, sizeof (conf), "playlist.scroll.%d", curr); - int scroll = deadbeef->conf_get_int (conf, 0); - snprintf (conf, sizeof (conf), "playlist.cursor.%d", curr); - int cursor = deadbeef->conf_get_int (conf, -1); - ddb_tabstrip_refresh (DDB_TABSTRIP (tabstrip)); - DdbListview *listview = DDB_LISTVIEW (lookup_widget (mainwin, "playlist")); - deadbeef->pl_set_cursor (PL_MAIN, cursor); - if (cursor != -1) { - DB_playItem_t *it = deadbeef->pl_get_for_idx_and_iter (cursor, PL_MAIN); - if (it) { - deadbeef->pl_set_selected (it, 1); - deadbeef->pl_item_unref (it); - } - } - - ddb_listview_refresh (listview, DDB_LIST_CHANGED | DDB_REFRESH_LIST | DDB_REFRESH_VSCROLL); - ddb_listview_set_vscroll (listview, scroll); search_refresh (); return FALSE; } @@ -825,40 +794,6 @@ on_add_location_activate (GtkMenuItem *menuitem, gtk_widget_destroy (dlg); } -static void -songchanged (DdbListview *ps, DB_playItem_t *from, DB_playItem_t *to) { - int to_idx = -1; - if (!ddb_listview_is_scrolling (ps) && to) { - int cursor_follows_playback = deadbeef->conf_get_int ("playlist.scroll.cursorfollowplayback", 0); - int scroll_follows_playback = deadbeef->conf_get_int ("playlist.scroll.followplayback", 0); - int plt = deadbeef->streamer_get_current_playlist (); - if (plt != -1) { - if (cursor_follows_playback && plt != deadbeef->plt_get_curr_idx ()) { - deadbeef->plt_set_curr_idx (plt); - } - to_idx = deadbeef->pl_get_idx_of (to); - if (to_idx != -1) { - if (cursor_follows_playback) { - ddb_listview_set_cursor_noscroll (ps, to_idx); - } - if (scroll_follows_playback && plt == deadbeef->plt_get_curr_idx ()) { - ddb_listview_scroll_to (ps, to_idx); - } - } - } - } - - if (from) { - int idx = deadbeef->pl_get_idx_of (from); - if (idx != -1) { - ddb_listview_draw_row (ps, idx, from); - } - } - if (to && to_idx != -1) { - ddb_listview_draw_row (ps, to_idx, to); - } -} - static gboolean update_win_title_idle (gpointer data) { struct fromto_t *ft = (struct fromto_t *)data; @@ -882,8 +817,6 @@ update_win_title_idle (gpointer data) { gtkui_set_titlebar (NULL); } } - // update playlist view - songchanged (DDB_LISTVIEW (lookup_widget (mainwin, "playlist")), from, to); if (from) { deadbeef->pl_item_unref (from); } @@ -941,11 +874,11 @@ volumebar_redraw (void) { gdk_window_invalidate_rect (volumebar->window, NULL, FALSE); } -void -tabstrip_redraw (void) { - GtkWidget *ts = lookup_widget (mainwin, "tabstrip"); - ddb_tabstrip_refresh (DDB_TABSTRIP (ts)); -} +//void +//tabstrip_redraw (void) { +// GtkWidget *ts = lookup_widget (mainwin, "tabstrip"); +// ddb_tabstrip_refresh (DDB_TABSTRIP (ts)); +//} static int gtk_initialized = 0; static gint refresh_timeout = 0; @@ -970,8 +903,22 @@ gtkui_setup_gui_refresh (void) { refresh_timeout = g_timeout_add (tm, gtkui_on_frameupdate, NULL); } +static void +send_messages_to_widgets (ddb_gtkui_widget_t *w, uint32_t id, uintptr_t ctx, uint32_t p1, uint32_t p2) { + for (ddb_gtkui_widget_t *c = w->children; c; c = c->next) { + send_messages_to_widgets (c, id, ctx, p1, p2); + } + if (w->message) { + w->message (w, id, ctx, p1, p2); + } +} + int gtkui_message (uint32_t id, uintptr_t ctx, uint32_t p1, uint32_t p2) { + ddb_gtkui_widget_t *rootwidget = w_get_rootwidget (); + if (rootwidget) { + send_messages_to_widgets (rootwidget, id, ctx, p1, p2); + } switch (id) { case DB_EV_ACTIVATED: g_idle_add (activate_cb, NULL); @@ -991,9 +938,9 @@ gtkui_message (uint32_t id, uintptr_t ctx, uint32_t p1, uint32_t p2) { g_idle_add (trackinfochanged_cb, ev->track); } break; - case DB_EV_PAUSED: - g_idle_add (paused_cb, NULL); - break; +// case DB_EV_PAUSED: +// g_idle_add (paused_cb, NULL); +// break; case DB_EV_PLAYLISTCHANGED: gtkui_playlist_changed (); break; @@ -1033,7 +980,42 @@ gtkui_thread (void *ctx) { gtk_disable_setlocale (); gtk_init (&argc, (char ***)&argv); + // register widget types + w_reg_widget ("tabbed_playlist", _("Playlist with tabs"), w_tabbed_playlist_create); + w_reg_widget ("box", NULL, w_box_create); + w_reg_widget ("vsplitter", _("Splitter (top and bottom)"), w_vsplitter_create); + w_reg_widget ("hsplitter", _("Splitter (left and right)"), w_hsplitter_create); + w_reg_widget ("placeholder", NULL, w_placeholder_create); + w_reg_widget ("tabs", _("Tabs"), w_tabs_create); + w_reg_widget ("tabstrip", _("Playlist tabs"), w_tabstrip_create); + w_reg_widget ("playlist", _("Playlist"), w_playlist_create); + mainwin = create_mainwin (); + + // construct mainwindow widgets + { + + w_init (); + ddb_gtkui_widget_t *rootwidget = w_get_rootwidget (); + gtk_widget_show (rootwidget->widget); + gtk_box_pack_start (GTK_BOX(lookup_widget(mainwin, "plugins_bottom_vbox")), rootwidget->widget, TRUE, TRUE, 0); + + // load layout + char layout[1024]; + deadbeef->conf_get_str ("gtkui.layout", "tabbed_playlist { }", layout, sizeof (layout)); + + ddb_gtkui_widget_t *w = NULL; + w_create_from_string (layout, &w); + if (!w) { + ddb_gtkui_widget_t *plt = w_create ("tabbed_playlist"); + w_append (rootwidget, plt); + gtk_widget_show (plt->widget); + } + else { + w_append (rootwidget, w); + } + } + gtkpl_init (); GtkIconTheme *theme = gtk_icon_theme_get_default(); @@ -1074,16 +1056,13 @@ gtkui_thread (void *ctx) { searchwin = create_searchwin (); gtk_window_set_transient_for (GTK_WINDOW (searchwin), GTK_WINDOW (mainwin)); - DdbListview *main_playlist = DDB_LISTVIEW (lookup_widget (mainwin, "playlist")); - main_playlist_init (GTK_WIDGET (main_playlist)); - +// DdbListview *main_playlist = DDB_LISTVIEW (lookup_widget (mainwin, "playlist")); +// main_playlist_init (GTK_WIDGET (main_playlist)); if (deadbeef->conf_get_int ("gtkui.headers.visible", 1)) { gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (header_mi), TRUE); - ddb_listview_show_header (main_playlist, 1); } else { gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (header_mi), FALSE); - ddb_listview_show_header (main_playlist, 0); } DdbListview *search_playlist = DDB_LISTVIEW (lookup_widget (searchwin, "searchlist")); @@ -1106,6 +1085,11 @@ gtkui_thread (void *ctx) { gtk_main (); + w_free (); +// w_unreg_widget ("tabbed_playlist"); +// w_unreg_widget ("box"); +// w_unreg_widget ("vsplitter"); + if (refresh_timeout) { g_source_remove (refresh_timeout); refresh_timeout = 0; @@ -1311,7 +1295,7 @@ gtkui_stop (void) { deadbeef->thread_join (gtk_tid); trace ("gtk thread finished\n"); gtk_tid = 0; - main_playlist_free (); + //main_playlist_free (); trace ("gtkui_stop completed\n"); return 0; } @@ -1371,4 +1355,5 @@ static ddb_gtkui_t plugin = { .gui.plugin.message = gtkui_message, .gui.run_dialog = gtkui_run_dialog_root, .get_mainwin = gtkui_get_mainwin, + .api_version = GTKUI_API_VERSION, }; diff --git a/plugins/gtkui/gtkui.h b/plugins/gtkui/gtkui.h index e2ed8dbf..f3b075d3 100644 --- a/plugins/gtkui/gtkui.h +++ b/plugins/gtkui/gtkui.h @@ -133,8 +133,8 @@ on_seekbar_motion_notify_event (GtkWidget *widget, void volumebar_redraw (void); -void -tabstrip_redraw (void); +//void +//tabstrip_redraw (void); void gtkui_playlist_changed (void); @@ -172,4 +172,7 @@ gtkui_get_curr_playlist_mod (void); void gtkui_trackinfochanged (DB_playItem_t *it); +gboolean +redraw_queued_tracks_cb (gpointer plt); + #endif diff --git a/plugins/gtkui/gtkui_api.h b/plugins/gtkui/gtkui_api.h index f20c411e..042c4fa5 100644 --- a/plugins/gtkui/gtkui_api.h +++ b/plugins/gtkui/gtkui_api.h @@ -25,9 +25,36 @@ #ifndef __GTKUI_API_H #define __GTKUI_API_H +#define GTKUI_API_VERSION 1 // for compile-time checking + +typedef struct ddb_gtkui_widget_s { + const char *type; + + struct ddb_gtkui_widget_s *parent; + + GtkWidget *widget; + + uint32_t flags; + + void (*destroy) (struct ddb_gtkui_widget_s *w); + + void (*append) (struct ddb_gtkui_widget_s *container, struct ddb_gtkui_widget_s *child); + void (*remove) (struct ddb_gtkui_widget_s *container, struct ddb_gtkui_widget_s *child); + void (*replace) (struct ddb_gtkui_widget_s *container, struct ddb_gtkui_widget_s *child, struct ddb_gtkui_widget_s *newchild); + + int (*message) (struct ddb_gtkui_widget_s *w, uint32_t id, uintptr_t ctx, uint32_t p1, uint32_t p2); + + struct ddb_gtkui_widget_s *children; + struct ddb_gtkui_widget_s *next; // points to next widget in the same container +} ddb_gtkui_widget_t; + typedef struct { DB_gui_t gui; + int api_version; GtkWidget * (*get_mainwin) (void); + void (*reg_widget) (const char *type, ddb_gtkui_widget_t *(*create_func) (void)); + void (*unreg_widget) (const char *type); + ddb_gtkui_widget_t * (*get_root_widget) (void); } ddb_gtkui_t; #endif diff --git a/plugins/gtkui/interface.c b/plugins/gtkui/interface.c index 67d70dba..d09e9dc7 100644 --- a/plugins/gtkui/interface.c +++ b/plugins/gtkui/interface.c @@ -35,12 +35,12 @@ create_mainwin (void) GtkWidget *File; GtkWidget *File_menu; GtkWidget *open; - GtkWidget *image555; + GtkWidget *image563; GtkWidget *separator2; GtkWidget *add_files; - GtkWidget *image556; + GtkWidget *image564; GtkWidget *add_folders; - GtkWidget *image557; + GtkWidget *image565; GtkWidget *add_location1; GtkWidget *separatormenuitem1; GtkWidget *new_playlist1; @@ -48,18 +48,18 @@ create_mainwin (void) GtkWidget *playlist_save_as; GtkWidget *separator8; GtkWidget *quit; - GtkWidget *image558; + GtkWidget *image566; GtkWidget *Edit; GtkWidget *Edit_menu; GtkWidget *clear1; - GtkWidget *image559; + GtkWidget *image567; GtkWidget *select_all1; GtkWidget *deselect_all1; GtkWidget *invert_selection1; GtkWidget *Selection; GtkWidget *Selection_menu; GtkWidget *remove1; - GtkWidget *image560; + GtkWidget *image568; GtkWidget *crop1; GtkWidget *find1; GtkWidget *sort_by1; @@ -78,6 +78,7 @@ create_mainwin (void) GtkWidget *view_headers; GtkWidget *view_tabs; GtkWidget *view_eq; + GtkWidget *design_mode1; GtkWidget *Playback; GtkWidget *Playback_menu; GtkWidget *Order; @@ -101,16 +102,16 @@ create_mainwin (void) GtkWidget *Help; GtkWidget *Help_menu; GtkWidget *help1; - GtkWidget *image561; + GtkWidget *image569; GtkWidget *changelog1; GtkWidget *separator10; GtkWidget *gpl1; GtkWidget *lgpl1; GtkWidget *separator9; GtkWidget *about1; - GtkWidget *image562; + GtkWidget *image570; GtkWidget *translators1; - GtkWidget *image563; + GtkWidget *image571; GtkWidget *hbox2; GtkWidget *hbox3; GtkWidget *stopbtn; @@ -125,9 +126,6 @@ create_mainwin (void) GtkWidget *image5; GtkWidget *seekbar; GtkWidget *volumebar; - GtkWidget *tabstrip; - GtkWidget *frame1; - GtkWidget *playlist; GtkWidget *plugins_bottom_vbox; GtkWidget *statusbar; GtkAccelGroup *accel_group; @@ -161,9 +159,9 @@ create_mainwin (void) GDK_O, (GdkModifierType) GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); - image555 = gtk_image_new_from_stock ("gtk-open", GTK_ICON_SIZE_MENU); - gtk_widget_show (image555); - gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (open), image555); + image563 = gtk_image_new_from_stock ("gtk-open", GTK_ICON_SIZE_MENU); + gtk_widget_show (image563); + gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (open), image563); separator2 = gtk_separator_menu_item_new (); gtk_widget_show (separator2); @@ -174,17 +172,17 @@ create_mainwin (void) gtk_widget_show (add_files); gtk_container_add (GTK_CONTAINER (File_menu), add_files); - image556 = gtk_image_new_from_stock ("gtk-add", GTK_ICON_SIZE_MENU); - gtk_widget_show (image556); - gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (add_files), image556); + image564 = gtk_image_new_from_stock ("gtk-add", GTK_ICON_SIZE_MENU); + gtk_widget_show (image564); + gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (add_files), image564); add_folders = gtk_image_menu_item_new_with_mnemonic (_("Add folder(s)")); gtk_widget_show (add_folders); gtk_container_add (GTK_CONTAINER (File_menu), add_folders); - image557 = gtk_image_new_from_stock ("gtk-add", GTK_ICON_SIZE_MENU); - gtk_widget_show (image557); - gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (add_folders), image557); + image565 = gtk_image_new_from_stock ("gtk-add", GTK_ICON_SIZE_MENU); + gtk_widget_show (image565); + gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (add_folders), image565); add_location1 = gtk_menu_item_new_with_mnemonic (_("Add location")); gtk_widget_show (add_location1); @@ -222,9 +220,9 @@ create_mainwin (void) GDK_Q, (GdkModifierType) GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); - image558 = gtk_image_new_from_stock ("gtk-quit", GTK_ICON_SIZE_MENU); - gtk_widget_show (image558); - gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (quit), image558); + image566 = gtk_image_new_from_stock ("gtk-quit", GTK_ICON_SIZE_MENU); + gtk_widget_show (image566); + gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (quit), image566); Edit = gtk_menu_item_new_with_mnemonic (_("_Edit")); gtk_widget_show (Edit); @@ -237,9 +235,9 @@ create_mainwin (void) gtk_widget_show (clear1); gtk_container_add (GTK_CONTAINER (Edit_menu), clear1); - image559 = gtk_image_new_from_stock ("gtk-clear", GTK_ICON_SIZE_MENU); - gtk_widget_show (image559); - gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (clear1), image559); + image567 = gtk_image_new_from_stock ("gtk-clear", GTK_ICON_SIZE_MENU); + gtk_widget_show (image567); + gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (clear1), image567); select_all1 = gtk_menu_item_new_with_mnemonic (_("Select all")); gtk_widget_show (select_all1); @@ -270,9 +268,9 @@ create_mainwin (void) gtk_widget_show (remove1); gtk_container_add (GTK_CONTAINER (Selection_menu), remove1); - image560 = gtk_image_new_from_stock ("gtk-remove", GTK_ICON_SIZE_MENU); - gtk_widget_show (image560); - gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (remove1), image560); + image568 = gtk_image_new_from_stock ("gtk-remove", GTK_ICON_SIZE_MENU); + gtk_widget_show (image568); + gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (remove1), image568); crop1 = gtk_menu_item_new_with_mnemonic (_("Crop")); gtk_widget_show (crop1); @@ -348,6 +346,10 @@ create_mainwin (void) gtk_widget_show (view_eq); gtk_container_add (GTK_CONTAINER (View_menu), view_eq); + design_mode1 = gtk_check_menu_item_new_with_mnemonic (_("Design mode")); + gtk_widget_show (design_mode1); + gtk_container_add (GTK_CONTAINER (View_menu), design_mode1); + Playback = gtk_menu_item_new_with_mnemonic (_("_Playback")); gtk_widget_show (Playback); gtk_container_add (GTK_CONTAINER (menubar1), Playback); @@ -366,16 +368,19 @@ create_mainwin (void) order_linear_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (order_linear)); gtk_widget_show (order_linear); gtk_container_add (GTK_CONTAINER (Order_menu), order_linear); + gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (order_linear), TRUE); order_shuffle = gtk_radio_menu_item_new_with_mnemonic (order_linear_group, _("Shuffle tracks")); order_linear_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (order_shuffle)); gtk_widget_show (order_shuffle); gtk_container_add (GTK_CONTAINER (Order_menu), order_shuffle); + gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (order_shuffle), TRUE); order_shuffle_albums = gtk_radio_menu_item_new_with_mnemonic (order_linear_group, _("Shuffle albums")); order_linear_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (order_shuffle_albums)); gtk_widget_show (order_shuffle_albums); gtk_container_add (GTK_CONTAINER (Order_menu), order_shuffle_albums); + gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (order_shuffle_albums), TRUE); order_random = gtk_radio_menu_item_new_with_mnemonic (order_linear_group, _("Random")); order_linear_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (order_random)); @@ -394,11 +399,13 @@ create_mainwin (void) loop_all_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (loop_all)); gtk_widget_show (loop_all); gtk_container_add (GTK_CONTAINER (Looping_menu), loop_all); + gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (loop_all), TRUE); loop_single = gtk_radio_menu_item_new_with_mnemonic (loop_all_group, _("Loop Single Song")); loop_all_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (loop_single)); gtk_widget_show (loop_single); gtk_container_add (GTK_CONTAINER (Looping_menu), loop_single); + gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (loop_single), TRUE); loop_disable = gtk_radio_menu_item_new_with_mnemonic (loop_all_group, _("Don't Loop")); loop_all_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (loop_disable)); @@ -445,9 +452,9 @@ create_mainwin (void) gtk_widget_show (help1); gtk_container_add (GTK_CONTAINER (Help_menu), help1); - image561 = gtk_image_new_from_stock ("gtk-help", GTK_ICON_SIZE_MENU); - gtk_widget_show (image561); - gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (help1), image561); + image569 = gtk_image_new_from_stock ("gtk-help", GTK_ICON_SIZE_MENU); + gtk_widget_show (image569); + gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (help1), image569); changelog1 = gtk_menu_item_new_with_mnemonic (_("_ChangeLog")); gtk_widget_show (changelog1); @@ -475,17 +482,17 @@ create_mainwin (void) gtk_widget_show (about1); gtk_container_add (GTK_CONTAINER (Help_menu), about1); - image562 = gtk_image_new_from_stock ("gtk-about", GTK_ICON_SIZE_MENU); - gtk_widget_show (image562); - gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (about1), image562); + image570 = gtk_image_new_from_stock ("gtk-about", GTK_ICON_SIZE_MENU); + gtk_widget_show (image570); + gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (about1), image570); translators1 = gtk_image_menu_item_new_with_mnemonic (_("_Translators")); gtk_widget_show (translators1); gtk_container_add (GTK_CONTAINER (Help_menu), translators1); - image563 = gtk_image_new_from_stock ("gtk-about", GTK_ICON_SIZE_MENU); - gtk_widget_show (image563); - gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (translators1), image563); + image571 = gtk_image_new_from_stock ("gtk-about", GTK_ICON_SIZE_MENU); + gtk_widget_show (image571); + gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (translators1), image571); hbox2 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox2); @@ -580,27 +587,9 @@ create_mainwin (void) GTK_WIDGET_UNSET_FLAGS (volumebar, GTK_CAN_FOCUS); GTK_WIDGET_UNSET_FLAGS (volumebar, GTK_CAN_DEFAULT); - tabstrip = create_tabstrip_widget ("tabstrip", "", "", 0, 0); - gtk_widget_show (tabstrip); - gtk_box_pack_start (GTK_BOX (vbox1), tabstrip, FALSE, TRUE, 0); - gtk_widget_set_size_request (tabstrip, -1, 24); - GTK_WIDGET_UNSET_FLAGS (tabstrip, GTK_CAN_FOCUS); - GTK_WIDGET_UNSET_FLAGS (tabstrip, GTK_CAN_DEFAULT); - - frame1 = gtk_frame_new (NULL); - gtk_widget_show (frame1); - gtk_box_pack_start (GTK_BOX (vbox1), frame1, TRUE, TRUE, 0); - gtk_container_set_border_width (GTK_CONTAINER (frame1), 1); - - playlist = create_ddb_listview_widget ("playlist", "", "", 0, 0); - gtk_widget_show (playlist); - gtk_container_add (GTK_CONTAINER (frame1), playlist); - GTK_WIDGET_UNSET_FLAGS (playlist, GTK_CAN_FOCUS); - GTK_WIDGET_UNSET_FLAGS (playlist, GTK_CAN_DEFAULT); - plugins_bottom_vbox = gtk_vbox_new (FALSE, 0); gtk_widget_show (plugins_bottom_vbox); - gtk_box_pack_start (GTK_BOX (vbox1), plugins_bottom_vbox, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (vbox1), plugins_bottom_vbox, TRUE, TRUE, 0); statusbar = gtk_statusbar_new (); gtk_widget_show (statusbar); @@ -711,6 +700,9 @@ create_mainwin (void) g_signal_connect ((gpointer) view_eq, "activate", G_CALLBACK (on_toggle_eq), NULL); + g_signal_connect ((gpointer) design_mode1, "activate", + G_CALLBACK (on_design_mode1_activate), + NULL); g_signal_connect ((gpointer) order_linear, "activate", G_CALLBACK (on_order_linear_activate), NULL); @@ -785,12 +777,12 @@ create_mainwin (void) GLADE_HOOKUP_OBJECT (mainwin, File, "File"); GLADE_HOOKUP_OBJECT (mainwin, File_menu, "File_menu"); GLADE_HOOKUP_OBJECT (mainwin, open, "open"); - GLADE_HOOKUP_OBJECT (mainwin, image555, "image555"); + GLADE_HOOKUP_OBJECT (mainwin, image563, "image563"); GLADE_HOOKUP_OBJECT (mainwin, separator2, "separator2"); GLADE_HOOKUP_OBJECT (mainwin, add_files, "add_files"); - GLADE_HOOKUP_OBJECT (mainwin, image556, "image556"); + GLADE_HOOKUP_OBJECT (mainwin, image564, "image564"); GLADE_HOOKUP_OBJECT (mainwin, add_folders, "add_folders"); - GLADE_HOOKUP_OBJECT (mainwin, image557, "image557"); + GLADE_HOOKUP_OBJECT (mainwin, image565, "image565"); GLADE_HOOKUP_OBJECT (mainwin, add_location1, "add_location1"); GLADE_HOOKUP_OBJECT (mainwin, separatormenuitem1, "separatormenuitem1"); GLADE_HOOKUP_OBJECT (mainwin, new_playlist1, "new_playlist1"); @@ -798,18 +790,18 @@ create_mainwin (void) GLADE_HOOKUP_OBJECT (mainwin, playlist_save_as, "playlist_save_as"); GLADE_HOOKUP_OBJECT (mainwin, separator8, "separator8"); GLADE_HOOKUP_OBJECT (mainwin, quit, "quit"); - GLADE_HOOKUP_OBJECT (mainwin, image558, "image558"); + GLADE_HOOKUP_OBJECT (mainwin, image566, "image566"); GLADE_HOOKUP_OBJECT (mainwin, Edit, "Edit"); GLADE_HOOKUP_OBJECT (mainwin, Edit_menu, "Edit_menu"); GLADE_HOOKUP_OBJECT (mainwin, clear1, "clear1"); - GLADE_HOOKUP_OBJECT (mainwin, image559, "image559"); + GLADE_HOOKUP_OBJECT (mainwin, image567, "image567"); GLADE_HOOKUP_OBJECT (mainwin, select_all1, "select_all1"); GLADE_HOOKUP_OBJECT (mainwin, deselect_all1, "deselect_all1"); GLADE_HOOKUP_OBJECT (mainwin, invert_selection1, "invert_selection1"); GLADE_HOOKUP_OBJECT (mainwin, Selection, "Selection"); GLADE_HOOKUP_OBJECT (mainwin, Selection_menu, "Selection_menu"); GLADE_HOOKUP_OBJECT (mainwin, remove1, "remove1"); - GLADE_HOOKUP_OBJECT (mainwin, image560, "image560"); + GLADE_HOOKUP_OBJECT (mainwin, image568, "image568"); GLADE_HOOKUP_OBJECT (mainwin, crop1, "crop1"); GLADE_HOOKUP_OBJECT (mainwin, find1, "find1"); GLADE_HOOKUP_OBJECT (mainwin, sort_by1, "sort_by1"); @@ -828,6 +820,7 @@ create_mainwin (void) GLADE_HOOKUP_OBJECT (mainwin, view_headers, "view_headers"); GLADE_HOOKUP_OBJECT (mainwin, view_tabs, "view_tabs"); GLADE_HOOKUP_OBJECT (mainwin, view_eq, "view_eq"); + GLADE_HOOKUP_OBJECT (mainwin, design_mode1, "design_mode1"); GLADE_HOOKUP_OBJECT (mainwin, Playback, "Playback"); GLADE_HOOKUP_OBJECT (mainwin, Playback_menu, "Playback_menu"); GLADE_HOOKUP_OBJECT (mainwin, Order, "Order"); @@ -849,16 +842,16 @@ create_mainwin (void) GLADE_HOOKUP_OBJECT (mainwin, Help, "Help"); GLADE_HOOKUP_OBJECT (mainwin, Help_menu, "Help_menu"); GLADE_HOOKUP_OBJECT (mainwin, help1, "help1"); - GLADE_HOOKUP_OBJECT (mainwin, image561, "image561"); + GLADE_HOOKUP_OBJECT (mainwin, image569, "image569"); GLADE_HOOKUP_OBJECT (mainwin, changelog1, "changelog1"); GLADE_HOOKUP_OBJECT (mainwin, separator10, "separator10"); GLADE_HOOKUP_OBJECT (mainwin, gpl1, "gpl1"); GLADE_HOOKUP_OBJECT (mainwin, lgpl1, "lgpl1"); GLADE_HOOKUP_OBJECT (mainwin, separator9, "separator9"); GLADE_HOOKUP_OBJECT (mainwin, about1, "about1"); - GLADE_HOOKUP_OBJECT (mainwin, image562, "image562"); + GLADE_HOOKUP_OBJECT (mainwin, image570, "image570"); GLADE_HOOKUP_OBJECT (mainwin, translators1, "translators1"); - GLADE_HOOKUP_OBJECT (mainwin, image563, "image563"); + GLADE_HOOKUP_OBJECT (mainwin, image571, "image571"); GLADE_HOOKUP_OBJECT (mainwin, hbox2, "hbox2"); GLADE_HOOKUP_OBJECT (mainwin, hbox3, "hbox3"); GLADE_HOOKUP_OBJECT (mainwin, stopbtn, "stopbtn"); @@ -873,9 +866,6 @@ create_mainwin (void) GLADE_HOOKUP_OBJECT (mainwin, image5, "image5"); GLADE_HOOKUP_OBJECT (mainwin, seekbar, "seekbar"); GLADE_HOOKUP_OBJECT (mainwin, volumebar, "volumebar"); - GLADE_HOOKUP_OBJECT (mainwin, tabstrip, "tabstrip"); - GLADE_HOOKUP_OBJECT (mainwin, frame1, "frame1"); - GLADE_HOOKUP_OBJECT (mainwin, playlist, "playlist"); GLADE_HOOKUP_OBJECT (mainwin, plugins_bottom_vbox, "plugins_bottom_vbox"); GLADE_HOOKUP_OBJECT (mainwin, statusbar, "statusbar"); diff --git a/plugins/gtkui/mainplaylist.c b/plugins/gtkui/mainplaylist.c index f04f9cb1..78db579f 100644 --- a/plugins/gtkui/mainplaylist.c +++ b/plugins/gtkui/mainplaylist.c @@ -347,9 +347,6 @@ main_playlist_free (void) { void main_refresh (void) { - if (mainwin && gtk_widget_get_visible (mainwin)) { - DdbListview *pl = DDB_LISTVIEW (lookup_widget (mainwin, "playlist")); - ddb_listview_refresh (pl, DDB_REFRESH_VSCROLL | DDB_REFRESH_LIST); - } + deadbeef->sendmessage (DB_EV_PLAYLISTCHANGED, 0, 0, 0); } diff --git a/plugins/gtkui/mainplaylist.h b/plugins/gtkui/mainplaylist.h index b17ef63d..56a076c1 100644 --- a/plugins/gtkui/mainplaylist.h +++ b/plugins/gtkui/mainplaylist.h @@ -19,6 +19,8 @@ #ifndef __MAINPLAYLIST_H #define __MAINPLAYLIST_H +#include "ddblistview.h" + void main_playlist_init (GtkWidget *widget); @@ -31,4 +33,7 @@ main_refresh (void); int main_get_idx (DdbListviewIter it); +void +main_drag_n_drop (DdbListviewIter before, DdbPlaylistHandle from_playlist, uint32_t *indices, int length, int copy); + #endif diff --git a/plugins/gtkui/prefwin.c b/plugins/gtkui/prefwin.c index 4f6207f4..d2d09300 100644 --- a/plugins/gtkui/prefwin.c +++ b/plugins/gtkui/prefwin.c @@ -860,8 +860,9 @@ on_tabstrip_light_color_set (GtkColorButton *colorbutton, deadbeef->conf_set_str ("gtkui.color.tabstrip_light", str); deadbeef->sendmessage (DB_EV_CONFIGCHANGED, 0, 0, 0); gtkui_init_theme_colors (); - redraw_headers (); - tabstrip_redraw (); +// redraw_headers (); +// tabstrip_redraw (); + gtk_widget_queue_draw (mainwin); } @@ -876,8 +877,9 @@ on_tabstrip_mid_color_set (GtkColorButton *colorbutton, deadbeef->conf_set_str ("gtkui.color.tabstrip_mid", str); deadbeef->sendmessage (DB_EV_CONFIGCHANGED, 0, 0, 0); gtkui_init_theme_colors (); - redraw_headers (); - tabstrip_redraw (); +// redraw_headers (); +// tabstrip_redraw (); + gtk_widget_queue_draw (mainwin); } @@ -892,8 +894,9 @@ on_tabstrip_dark_color_set (GtkColorButton *colorbutton, deadbeef->conf_set_str ("gtkui.color.tabstrip_dark", str); deadbeef->sendmessage (DB_EV_CONFIGCHANGED, 0, 0, 0); gtkui_init_theme_colors (); - redraw_headers (); - tabstrip_redraw (); +// redraw_headers (); +// tabstrip_redraw (); + gtk_widget_queue_draw (mainwin); } void @@ -907,8 +910,9 @@ on_tabstrip_base_color_set (GtkColorButton *colorbutton, deadbeef->conf_set_str ("gtkui.color.tabstrip_base", str); deadbeef->sendmessage (DB_EV_CONFIGCHANGED, 0, 0, 0); gtkui_init_theme_colors (); - redraw_headers (); - tabstrip_redraw (); +// redraw_headers (); +// tabstrip_redraw (); + gtk_widget_queue_draw (mainwin); } void @@ -922,8 +926,9 @@ on_tabstrip_text_color_set (GtkColorButton *colorbutton, deadbeef->conf_set_str ("gtkui.color.tabstrip_text", str); deadbeef->sendmessage (DB_EV_CONFIGCHANGED, 0, 0, 0); gtkui_init_theme_colors (); - redraw_headers (); - tabstrip_redraw (); +// redraw_headers (); +// tabstrip_redraw (); + gtk_widget_queue_draw (mainwin); } void @@ -1084,8 +1089,9 @@ on_override_tabstrip_colors_toggled (GtkToggleButton *togglebutton, deadbeef->sendmessage (DB_EV_CONFIGCHANGED, 0, 0, 0); gtkui_init_theme_colors (); prefwin_init_theme_colors (); - redraw_headers (); - tabstrip_redraw (); +// redraw_headers (); +// tabstrip_redraw (); + gtk_widget_queue_draw (mainwin); } void diff --git a/plugins/gtkui/widgets.c b/plugins/gtkui/widgets.c new file mode 100644 index 00000000..549ec9fe --- /dev/null +++ b/plugins/gtkui/widgets.c @@ -0,0 +1,975 @@ +/* + DeaDBeeF - ultimate music player for GNU/Linux systems with X11 + Copyright (C) 2009-2011 Alexey Yakovenko <waker@users.sourceforge.net> + + 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 Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + +#include <stdlib.h> +#include <string.h> +#include "gtkui.h" +#include "widgets.h" +#include "ddbtabstrip.h" +#include "ddblistview.h" +#include "mainplaylist.h" +#include "../../gettext.h" +#include "parser.h" + +typedef struct w_creator_s { + const char *type; + const char *title; // set to NULL to avoid exposing this widget type to user + ddb_gtkui_widget_t *(*create_func) (void); + struct w_creator_s *next; +} w_creator_t; + +static w_creator_t *w_creators; + +typedef struct { + ddb_gtkui_widget_t base; +} w_splitter_t; + +typedef struct { + ddb_gtkui_widget_t base; +} w_box_t; + +typedef struct { + ddb_gtkui_widget_t base; +} w_tabstrip_t; + +typedef struct { + ddb_gtkui_widget_t base; + DdbTabStrip *tabstrip; + DdbListview *list; +} w_tabbed_playlist_t; + +typedef struct { + ddb_gtkui_widget_t base; +} w_playlist_t; + +typedef struct { + ddb_gtkui_widget_t base; +} w_placeholder_t; + +typedef struct { + ddb_gtkui_widget_t base; +} w_tabs_t; + +static int design_mode; +static ddb_gtkui_widget_t *rootwidget; + +//// common functions + +void +w_init (void) { + rootwidget = w_create ("box"); +} + +void +w_free (void) { + w_creator_t *next = NULL; + for (w_creator_t *cr = w_creators; cr; cr = next) { + next = cr->next; + free (cr); + } + w_creators = NULL; +} + +ddb_gtkui_widget_t * +w_get_rootwidget (void) { + return rootwidget; +} + +static void +set_design_mode (ddb_gtkui_widget_t *w) { + for (ddb_gtkui_widget_t *c = w->children; c; c = c->next) { + set_design_mode (c); + } +} + +void +w_set_design_mode (int active) { + design_mode = active; + set_design_mode (rootwidget); +} + +void +w_append (ddb_gtkui_widget_t *cont, ddb_gtkui_widget_t *child) { + child->parent = cont; + if (!cont->children) { + cont->children = child; + } + else { + for (ddb_gtkui_widget_t *c = cont->children; c; c = c->next) { + if (!c->next) { + c->next = child; + break; + } + } + } + + if (cont->append) { + cont->append (cont, child); + } +} + +void +w_remove (ddb_gtkui_widget_t *cont, ddb_gtkui_widget_t *child) { + if (cont->remove) { + cont->remove (cont, child); + } + child->widget = NULL; + ddb_gtkui_widget_t *prev = NULL; + for (ddb_gtkui_widget_t *c = cont->children; c; c = c->next) { + if (c == child) { + if (prev) { + prev->next = c->next; + } + else { + cont->children = c->next; + } + break; + } + prev = c; + } + child->parent = NULL; +} + +void +w_replace (ddb_gtkui_widget_t *w, ddb_gtkui_widget_t *from, ddb_gtkui_widget_t *to) { + if (w->replace) { + w->replace (w, from, to); + } + else { + w_remove (w, from); + w_destroy (from); + w_append (w, to); + } +} + +const char * +w_create_from_string (const char *s, ddb_gtkui_widget_t **parent) { + char t[MAX_TOKEN]; + s = gettoken (s, t); + printf ("%s\n", t); + if (!s) { + return NULL; + } + ddb_gtkui_widget_t *w = w_create (t); + // nuke all default children + while (w->children) { + w_remove (w, w->children); + } + + s = gettoken (s, t); + printf ("%s\n", t); + if (!s) { + w_destroy (w); + return NULL; + } + if (strcmp (t, "{")) { + w_destroy (w); + return NULL; + } + + const char *back = s; + s = gettoken (s, t); + if (!s) { + w_destroy (w); + return NULL; + } + for (;;) { + printf ("internal: %s\n", t); + if (!strcmp (t, "}")) { + break; + } + + s = w_create_from_string (back, &w); + if (!s) { + w_destroy (w); + return NULL; + } + + back = s; + s = gettoken (s, t); + if (!s) { + w_destroy (w); + return NULL; + } + } + + if (*parent) { + w_append (*parent, w); + } + else { + *parent = w; + } + return s; +} + +static ddb_gtkui_widget_t *current_widget; +static int hidden = 0; + +gboolean +w_expose_event (GtkWidget *widget, GdkEventExpose *event, gpointer user_data) { + if (hidden && user_data == current_widget) { + GdkColor clr = { + .red = 0x2d00, + .green = 0x0000, + .blue = 0xd600 + }; + GdkGC *gc = gdk_gc_new (widget->window); + gdk_gc_set_rgb_fg_color (gc, &clr); + if (GTK_WIDGET_NO_WINDOW (widget)) { + gdk_draw_rectangle (widget->window, gc, TRUE, widget->allocation.x, widget->allocation.y, widget->allocation.width, widget->allocation.height); + } + else { + gdk_draw_rectangle (widget->window, gc, TRUE, 0, 0, widget->allocation.width, widget->allocation.height); + } + g_object_unref (gc); + return TRUE; + } + + return FALSE; +} + +static char paste_buffer[1000]; + +static void +save_widget_to_string (char *str, ddb_gtkui_widget_t *w) { + strcat (str, w->type); + strcat (str, "{"); + for (ddb_gtkui_widget_t *c = w->children; c; c = c->next) { + save_widget_to_string (str, c); + } + strcat (str, "} "); +} + +void +w_save (void) { + char buf[1000] = ""; + save_widget_to_string (buf, rootwidget->children); + deadbeef->conf_set_str ("gtkui.layout", buf); + deadbeef->conf_save (); +} + +static void +on_replace_activate (GtkMenuItem *menuitem, gpointer user_data) { + for (w_creator_t *cr = w_creators; cr; cr = cr->next) { + if (cr->type == user_data) { + w_replace (current_widget->parent, current_widget, w_create (user_data)); + } + } + w_save (); +} + +static void +on_delete_activate (GtkMenuItem *menuitem, gpointer user_data) { + ddb_gtkui_widget_t *parent = current_widget->parent; + if (!strcmp (current_widget->type, "placeholder")) { + return; + } + if (parent->replace) { + parent->replace (parent, current_widget, w_create ("placeholder")); + } + else { + w_remove (parent, current_widget); + w_destroy (current_widget); + current_widget = w_create ("placeholder"); + w_append (parent, current_widget); + } + w_save (); +} + +static void +on_cut_activate (GtkMenuItem *menuitem, gpointer user_data) { + ddb_gtkui_widget_t *parent = current_widget->parent; + if (!strcmp (current_widget->type, "placeholder")) { + return; + } + // save hierarchy to string + // FIXME: use real clipboard + paste_buffer[0] = 0; + save_widget_to_string (paste_buffer, current_widget); + + if (parent->replace) { + parent->replace (parent, current_widget, w_create ("placeholder")); + } + else { + w_remove (parent, current_widget); + w_destroy (current_widget); + current_widget = w_create ("placeholder"); + w_append (parent, current_widget); + } + printf ("%s\n", paste_buffer); + w_save (); +} + +static void +on_copy_activate (GtkMenuItem *menuitem, gpointer user_data) { + ddb_gtkui_widget_t *parent = current_widget->parent; + if (!strcmp (current_widget->type, "placeholder")) { + return; + } + // save hierarchy to string + // FIXME: use real clipboard + paste_buffer[0] = 0; + save_widget_to_string (paste_buffer, current_widget); + printf ("%s\n", paste_buffer); +} + +static void +on_paste_activate (GtkMenuItem *menuitem, gpointer user_data) { + ddb_gtkui_widget_t *parent = current_widget->parent; + if (!paste_buffer[0]) { + return; + } + ddb_gtkui_widget_t *w = NULL; + w_create_from_string (paste_buffer, &w); + if (parent->replace) { + parent->replace (parent, current_widget, w); + } + else { + w_remove (parent, current_widget); + w_destroy (current_widget); + current_widget = w; + w_append (parent, current_widget); + } + w_save (); +} + +void +hide_widget (GtkWidget *widget, gpointer data) { + gtk_widget_hide (widget); +} + +void +show_widget (GtkWidget *widget, gpointer data) { + gtk_widget_show (widget); +} + +void +w_menu_deactivate (GtkMenuShell *menushell, gpointer user_data) { + hidden = 0; + ddb_gtkui_widget_t *w = user_data; + if (GTK_IS_CONTAINER (w->widget)) { + gtk_container_foreach (GTK_CONTAINER (w->widget), show_widget, NULL); + } + gtk_widget_queue_draw (w->widget); +} + +gboolean +w_button_press_event (GtkWidget *widget, GdkEventButton *event, gpointer user_data) { + if (!design_mode || event->button != 3) { + return FALSE; + } + printf ("button_press on %s (%p)\n", G_OBJECT_TYPE_NAME (widget), widget); + + current_widget = user_data; + hidden = 1; + if (GTK_IS_CONTAINER (widget)) { + gtk_container_foreach (GTK_CONTAINER (widget), hide_widget, NULL); + } + gtk_widget_queue_draw (((ddb_gtkui_widget_t *)user_data)->widget); + GtkWidget *menu; + GtkWidget *submenu; + GtkWidget *item; + menu = gtk_menu_new (); + if (strcmp (current_widget->type, "placeholder")) { + item = gtk_menu_item_new_with_mnemonic (_("Replace with...")); + gtk_widget_show (item); + gtk_container_add (GTK_CONTAINER (menu), item); + } + else { + item = gtk_menu_item_new_with_mnemonic (_("Insert...")); + gtk_widget_show (item); + gtk_container_add (GTK_CONTAINER (menu), item); + } + + submenu = gtk_menu_new (); + gtk_menu_item_set_submenu (GTK_MENU_ITEM (item), submenu); + + for (w_creator_t *cr = w_creators; cr; cr = cr->next) { + if (cr->title) { + item = gtk_menu_item_new_with_mnemonic (cr->title); + gtk_widget_show (item); + gtk_container_add (GTK_CONTAINER (submenu), item); + g_signal_connect ((gpointer) item, "activate", + G_CALLBACK (on_replace_activate), + (void *)cr->type); + } + } + + if (strcmp (current_widget->type, "placeholder")) { + item = gtk_menu_item_new_with_mnemonic (_("Delete")); + gtk_widget_show (item); + gtk_container_add (GTK_CONTAINER (menu), item); + g_signal_connect ((gpointer) item, "activate", + G_CALLBACK (on_delete_activate), + NULL); + + item = gtk_menu_item_new_with_mnemonic (_("Cut")); + gtk_widget_show (item); + gtk_container_add (GTK_CONTAINER (menu), item); + g_signal_connect ((gpointer) item, "activate", + G_CALLBACK (on_cut_activate), + NULL); + + item = gtk_menu_item_new_with_mnemonic (_("Copy")); + gtk_widget_show (item); + gtk_container_add (GTK_CONTAINER (menu), item); + g_signal_connect ((gpointer) item, "activate", + G_CALLBACK (on_copy_activate), + NULL); + } + item = gtk_menu_item_new_with_mnemonic ("Paste"); + gtk_widget_show (item); + gtk_container_add (GTK_CONTAINER (menu), item); + g_signal_connect ((gpointer) item, "activate", + G_CALLBACK (on_paste_activate), + NULL); + + g_signal_connect ((gpointer) menu, "deactivate", G_CALLBACK (w_menu_deactivate), user_data); + gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, widget, 0, gtk_get_current_event_time()); + return TRUE; +} + +static void +w_override_signals (GtkWidget *widget, gpointer user_data) { + printf ("w_override_signals on %s (%p)\n", G_OBJECT_TYPE_NAME (widget), widget); + g_signal_connect ((gpointer) widget, "button_press_event", G_CALLBACK (w_button_press_event), user_data); + g_signal_connect ((gpointer) widget, "expose_event", G_CALLBACK (w_expose_event), user_data); + if (GTK_IS_CONTAINER (widget)) { + gtk_container_forall (GTK_CONTAINER (widget), w_override_signals, user_data); + } +} + +void +w_reg_widget (const char *type, const char *title, ddb_gtkui_widget_t *(*create_func) (void)) { + w_creator_t *c; + for (c = w_creators; c; c = c->next) { + if (!strcmp (c->type, type)) { + fprintf (stderr, "gtkui w_reg_widget: widget type %s already registered\n"); + return; + } + } + c = malloc (sizeof (w_creator_t)); + memset (c, 0, sizeof (w_creator_t)); + c->type = type; + c->title = title; + c->create_func = create_func; + c->next = w_creators; + w_creators = c; +} + +void +w_unreg_widget (const char *type) { + w_creator_t *c, *prev = NULL; + for (c = w_creators; c; c = c->next) { + if (!strcmp (c->type, type)) { + if (prev) { + prev->next = c->next; + } + else { + w_creators = c->next; + } + free (c); + return; + } + prev = c; + } + fprintf (stderr, "gtkui w_unreg_widget: widget type %s is not registered\n"); +} + +ddb_gtkui_widget_t * +w_create (const char *type) { + for (w_creator_t *c = w_creators; c; c = c->next) { + if (!strcmp (c->type, type)) { + ddb_gtkui_widget_t *w = c->create_func (); + w->type = c->type; + + return w; + } + } + return NULL; +} + +void +w_destroy (ddb_gtkui_widget_t *w) { + if (w->destroy) { + w->destroy (w); + } + if (w->widget) { + gtk_widget_destroy (w->widget); + } + free (w); +} + +///// gtk_container convenience functions +void +w_container_add (ddb_gtkui_widget_t *cont, ddb_gtkui_widget_t *child) { + printf ("append %s to %s\n", child->type, cont->type); + GtkWidget *container = NULL; + container = cont->widget; + gtk_container_add (GTK_CONTAINER (container), child->widget); + gtk_widget_show (child->widget); +} + +void +w_container_remove (ddb_gtkui_widget_t *cont, ddb_gtkui_widget_t *child) { + printf ("remove %s from %s\n", child->type, cont->type); + GtkWidget *container = NULL; + container = cont->widget; + gtk_container_remove (GTK_CONTAINER (container), child->widget); + +} + +////// placeholder widget + +gboolean +w_placeholder_expose_event (GtkWidget *widget, GdkEventExpose *event, gpointer user_data) { + cairo_t *cr = gdk_cairo_create (widget->window); + cairo_set_source_rgb (cr, 255, 0, 0); + cairo_surface_t *checker; + cairo_t *cr2; + + checker = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, 12, 12); + cr2 = cairo_create (checker); + + cairo_set_source_rgb (cr2, 0.5, 0.5 ,0.5); + cairo_paint (cr2); + cairo_set_source_rgb (cr2, 0, 0, 0); + cairo_move_to (cr2, 0, 0); + cairo_line_to (cr2, 12, 12); + cairo_move_to (cr2, 1, 12); + cairo_line_to (cr2, 12, 1); + cairo_set_line_width (cr2, 1); + cairo_set_antialias (cr2, CAIRO_ANTIALIAS_NONE); + cairo_stroke (cr2); + cairo_fill (cr2); + cairo_destroy (cr2); + + cairo_set_source_surface (cr, checker, 0, 0); + cairo_pattern_t *pt = cairo_get_source(cr); + cairo_pattern_set_extend (pt, CAIRO_EXTEND_REPEAT); + cairo_rectangle (cr, 0, 0, widget->allocation.width, widget->allocation.height); + cairo_paint (cr); + cairo_surface_destroy (checker); + cairo_destroy (cr); + return FALSE; +} + +ddb_gtkui_widget_t * +w_placeholder_create (void) { + w_placeholder_t *w = malloc (sizeof (w_placeholder_t)); + memset (w, 0, sizeof (w_placeholder_t)); + w->base.widget = gtk_drawing_area_new (); + gtk_widget_set_events (w->base.widget, GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK); + g_signal_connect ((gpointer) w->base.widget, "expose_event", G_CALLBACK (w_expose_event), w); + g_signal_connect_after ((gpointer) w->base.widget, "expose_event", G_CALLBACK (w_placeholder_expose_event), w); + g_signal_connect ((gpointer) w->base.widget, "button_press_event", G_CALLBACK (w_button_press_event), w); + return (ddb_gtkui_widget_t*)w; +} + +////// vsplitter widget +void +w_splitter_replace (ddb_gtkui_widget_t *cont, ddb_gtkui_widget_t *child, ddb_gtkui_widget_t *newchild) { + printf ("w_splitter_replace %p\n", child); + int ntab = 0; + ddb_gtkui_widget_t *prev = NULL; + for (ddb_gtkui_widget_t *c = cont->children; c; c = c->next, ntab++) { + if (c == child) { + printf ("removing child %d\n", ntab); + newchild->next = c->next; + if (prev) { + prev->next = newchild; + } + else { + cont->children = newchild; + } + newchild->parent = cont; + gtk_container_remove (GTK_CONTAINER(cont->widget), c->widget); + c->widget = NULL; + w_destroy (c); + gtk_widget_show (newchild->widget); + if (ntab == 0) { + gtk_paned_add1 (GTK_PANED (cont->widget), newchild->widget); + } + else { + gtk_paned_add2 (GTK_PANED (cont->widget), newchild->widget); + } + break; + } + prev = c; + } +} + +ddb_gtkui_widget_t * +w_vsplitter_create (void) { + w_splitter_t *w = malloc (sizeof (w_splitter_t)); + memset (w, 0, sizeof (w_splitter_t)); + w->base.widget = gtk_vpaned_new (); + w->base.append = w_container_add; + w->base.remove = w_container_remove; + w->base.replace = w_splitter_replace; + + ddb_gtkui_widget_t *ph1, *ph2; + ph1 = w_create ("placeholder"); + ph2 = w_create ("placeholder"); + g_signal_connect ((gpointer) w->base.widget, "expose_event", G_CALLBACK (w_expose_event), w); + g_signal_connect ((gpointer) w->base.widget, "button_press_event", G_CALLBACK (w_button_press_event), w); + + w_append ((ddb_gtkui_widget_t*)w, ph1); + w_append ((ddb_gtkui_widget_t*)w, ph2); + + return (ddb_gtkui_widget_t*)w; +} + +////// hsplitter widget + +ddb_gtkui_widget_t * +w_hsplitter_create (void) { + w_splitter_t *w = malloc (sizeof (w_splitter_t)); + memset (w, 0, sizeof (w_splitter_t)); + w->base.widget = gtk_hpaned_new (); + w->base.append = w_container_add; + w->base.remove = w_container_remove; + w->base.replace = w_splitter_replace; + + ddb_gtkui_widget_t *ph1, *ph2; + ph1 = w_create ("placeholder"); + ph2 = w_create ("placeholder"); + g_signal_connect ((gpointer) w->base.widget, "expose_event", G_CALLBACK (w_expose_event), w); + g_signal_connect ((gpointer) w->base.widget, "button_press_event", G_CALLBACK (w_button_press_event), w); + + w_append ((ddb_gtkui_widget_t*)w, ph1); + w_append ((ddb_gtkui_widget_t*)w, ph2); + + return (ddb_gtkui_widget_t*)w; +} + +///// tabs widget + +void +w_tabs_add (ddb_gtkui_widget_t *cont, ddb_gtkui_widget_t *child) { + GtkWidget *label = gtk_label_new (child->type); + gtk_widget_show (label); + gtk_widget_show (child->widget); + gtk_notebook_append_page (GTK_NOTEBOOK (cont->widget), child->widget, label); +} + +void +w_tabs_replace (ddb_gtkui_widget_t *cont, ddb_gtkui_widget_t *child, ddb_gtkui_widget_t *newchild) { + printf ("w_tabs_replace %p\n", child); + int ntab = 0; + ddb_gtkui_widget_t *prev = NULL; + for (ddb_gtkui_widget_t *c = cont->children; c; c = c->next, ntab++) { + if (c == child) { + printf ("removing tab %d\n", ntab); + newchild->next = c->next; + if (prev) { + prev->next = newchild; + } + else { + cont->children = newchild; + } + newchild->parent = cont; + w_destroy (c); + GtkWidget *label = gtk_label_new (newchild->type); + gtk_widget_show (label); + gtk_widget_show (newchild->widget); + int pos = gtk_notebook_insert_page (GTK_NOTEBOOK (cont->widget), newchild->widget, label, ntab); + gtk_notebook_set_page (GTK_NOTEBOOK (cont->widget), pos); + break; + } + } +} + +ddb_gtkui_widget_t * +w_tabs_create (void) { + w_tabs_t *w = malloc (sizeof (w_tabs_t)); + memset (w, 0, sizeof (w_tabs_t)); + w->base.widget = gtk_notebook_new (); + w->base.append = w_tabs_add; + w->base.remove = w_container_remove; + w->base.replace = w_tabs_replace; + + ddb_gtkui_widget_t *ph1, *ph2, *ph3; + ph1 = w_create ("placeholder"); + ph2 = w_create ("placeholder"); + ph3 = w_create ("placeholder"); + + g_signal_connect ((gpointer) w->base.widget, "expose_event", G_CALLBACK (w_expose_event), w); + g_signal_connect ((gpointer) w->base.widget, "button_press_event", G_CALLBACK (w_button_press_event), w); + + w_append ((ddb_gtkui_widget_t*)w, ph1); + w_append ((ddb_gtkui_widget_t*)w, ph2); + w_append ((ddb_gtkui_widget_t*)w, ph3); + + return (ddb_gtkui_widget_t*)w; +} + +//// box widget +//// this widget should not be exposed to user, it is used as a top level +//// container (rootwidget) + +ddb_gtkui_widget_t * +w_box_create (void) { + w_box_t *w = malloc (sizeof (w_box_t)); + memset (w, 0, sizeof (w_box_t)); + w->base.widget = gtk_vbox_new (FALSE, 0); + w->base.append = w_container_add; + w->base.remove = w_container_remove; + + return (ddb_gtkui_widget_t*)w; +} + +//// tabstrip widget + +ddb_gtkui_widget_t * +w_tabstrip_create (void) { + w_tabstrip_t *w = malloc (sizeof (w_tabstrip_t)); + memset (w, 0, sizeof (w_tabstrip_t)); + w->base.widget = ddb_tabstrip_new (); + w_override_signals (w->base.widget, w); + return (ddb_gtkui_widget_t*)w; +} + +//// tabbed playlist widget + +typedef struct { + ddb_gtkui_widget_t *w; + DB_playItem_t *trk; +} w_trackdata_t; + +static gboolean +trackinfochanged_cb (gpointer p) { + w_trackdata_t *d = p; + w_tabbed_playlist_t *tp = (w_tabbed_playlist_t *)d->w; + ddb_playlist_t *plt = deadbeef->plt_get_curr (); + if (plt) { + int idx = deadbeef->plt_get_item_idx (plt, (DB_playItem_t *)d->trk, PL_MAIN); + if (idx != -1) { + ddb_listview_draw_row (tp->list, idx, (DdbListviewIter)d->trk); + } + deadbeef->plt_unref (plt); + } + deadbeef->pl_item_unref (d->trk); + free (d); + return FALSE; +} + +static gboolean +paused_cb (gpointer p) { + w_tabbed_playlist_t *tp = (w_tabbed_playlist_t *)p; + DB_playItem_t *curr = deadbeef->streamer_get_playing_track (); + if (curr) { + int idx = deadbeef->pl_get_idx_of (curr); + ddb_listview_draw_row (tp->list, idx, (DdbListviewIter)curr); + deadbeef->pl_item_unref (curr); + } + return FALSE; +} + +static gboolean +refresh_cb (gpointer p) { + w_tabbed_playlist_t *tp = (w_tabbed_playlist_t *)p; + ddb_listview_clear_sort (tp->list); + ddb_listview_refresh (tp->list, DDB_REFRESH_LIST | DDB_REFRESH_VSCROLL); + return FALSE; +} + + +static gboolean +playlistswitch_cb (gpointer p) { + w_tabbed_playlist_t *tp = (w_tabbed_playlist_t *)p; + int curr = deadbeef->plt_get_curr_idx (); + char conf[100]; + snprintf (conf, sizeof (conf), "playlist.scroll.%d", curr); + int scroll = deadbeef->conf_get_int (conf, 0); + snprintf (conf, sizeof (conf), "playlist.cursor.%d", curr); + int cursor = deadbeef->conf_get_int (conf, -1); + ddb_tabstrip_refresh (tp->tabstrip); + deadbeef->pl_set_cursor (PL_MAIN, cursor); + if (cursor != -1) { + DB_playItem_t *it = deadbeef->pl_get_for_idx_and_iter (cursor, PL_MAIN); + if (it) { + deadbeef->pl_set_selected (it, 1); + deadbeef->pl_item_unref (it); + } + } + + ddb_listview_refresh (tp->list, DDB_LIST_CHANGED | DDB_REFRESH_LIST | DDB_REFRESH_VSCROLL); + ddb_listview_set_vscroll (tp->list, scroll); + return FALSE; +} + +struct fromto_t { + ddb_gtkui_widget_t *w; + DB_playItem_t *from; + DB_playItem_t *to; +}; + +static gboolean +songchanged_cb (gpointer p) { + struct fromto_t *ft = p; + DB_playItem_t *from = ft->from; + DB_playItem_t *to = ft->to; + w_tabbed_playlist_t *tp = (w_tabbed_playlist_t *)ft->w; + int to_idx = -1; + if (!ddb_listview_is_scrolling (tp->list) && to) { + int cursor_follows_playback = deadbeef->conf_get_int ("playlist.scroll.cursorfollowplayback", 0); + int scroll_follows_playback = deadbeef->conf_get_int ("playlist.scroll.followplayback", 0); + int plt = deadbeef->streamer_get_current_playlist (); + if (plt != -1) { + if (cursor_follows_playback && plt != deadbeef->plt_get_curr_idx ()) { + deadbeef->plt_set_curr_idx (plt); + } + to_idx = deadbeef->pl_get_idx_of (to); + if (to_idx != -1) { + if (cursor_follows_playback) { + ddb_listview_set_cursor_noscroll (tp->list, to_idx); + } + if (scroll_follows_playback && plt == deadbeef->plt_get_curr_idx ()) { + ddb_listview_scroll_to (tp->list, to_idx); + } + } + } + } + + if (from) { + int idx = deadbeef->pl_get_idx_of (from); + if (idx != -1) { + ddb_listview_draw_row (tp->list, idx, from); + } + } + if (to && to_idx != -1) { + ddb_listview_draw_row (tp->list, to_idx, to); + } + if (ft->from) { + deadbeef->pl_item_unref (ft->from); + } + if (ft->to) { + deadbeef->pl_item_unref (ft->to); + } + free (ft); + return FALSE; +} + +static int +w_tabbed_playlist_message (ddb_gtkui_widget_t *w, uint32_t id, uintptr_t ctx, uint32_t p1, uint32_t p2) { + w_tabbed_playlist_t *tp = (w_tabbed_playlist_t *)w; + switch (id) { + case DB_EV_SONGCHANGED: + g_idle_add (redraw_queued_tracks_cb, tp->list); + ddb_event_trackchange_t *ev = (ddb_event_trackchange_t *)ctx; + struct fromto_t *ft = malloc (sizeof (struct fromto_t)); + ft->from = ev->from; + ft->to = ev->to; + if (ft->from) { + deadbeef->pl_item_ref (ft->from); + } + if (ft->to) { + deadbeef->pl_item_ref (ft->to); + } + ft->w = w; + g_idle_add (songchanged_cb, ft); + break; + case DB_EV_TRACKINFOCHANGED: + { + ddb_event_track_t *ev = (ddb_event_track_t *)ctx; + if (ev->track) { + deadbeef->pl_item_ref (ev->track); + } + w_trackdata_t *d = malloc (sizeof (w_trackdata_t)); + memset (d, 0, sizeof (w_trackdata_t)); + d->w = w; + d->trk = ev->track; + g_idle_add (trackinfochanged_cb, d); + } + break; + case DB_EV_PAUSED: + g_idle_add (paused_cb, w); + break; + case DB_EV_PLAYLISTCHANGED: + g_idle_add (refresh_cb, w); + break; + case DB_EV_PLAYLISTSWITCHED: + g_idle_add (playlistswitch_cb, w); + break; + } + return 0; +} + +ddb_gtkui_widget_t * +w_tabbed_playlist_create (void) { + w_tabbed_playlist_t *w = malloc (sizeof (w_tabbed_playlist_t)); + memset (w, 0, sizeof (w_tabbed_playlist_t)); + + GtkWidget *vbox = gtk_vbox_new (FALSE, 0); + w->base.widget = vbox; + gtk_widget_show (vbox); + + GtkWidget *tabstrip = ddb_tabstrip_new (); + w->tabstrip = (DdbTabStrip *)tabstrip; + gtk_widget_show (tabstrip); + GtkWidget *list = ddb_listview_new (); + w->list = (DdbListview *)list; + gtk_widget_show (list); + GtkWidget *frame = gtk_frame_new (NULL); + gtk_widget_show (frame); + + gtk_box_pack_start (GTK_BOX (vbox), tabstrip, FALSE, TRUE, 0); + gtk_widget_set_size_request (tabstrip, -1, 24); + GTK_WIDGET_UNSET_FLAGS (tabstrip, GTK_CAN_FOCUS); + GTK_WIDGET_UNSET_FLAGS (tabstrip, GTK_CAN_DEFAULT); + + gtk_box_pack_start (GTK_BOX (vbox), frame, TRUE, TRUE, 0); + gtk_container_set_border_width (GTK_CONTAINER (frame), 1); + + gtk_container_add (GTK_CONTAINER (frame), list); + main_playlist_init (list); + if (deadbeef->conf_get_int ("gtkui.headers.visible", 1)) { + ddb_listview_show_header (w->list, 1); + } + else { + ddb_listview_show_header (w->list, 0); + } + + gtk_container_forall (GTK_CONTAINER (w->base.widget), w_override_signals, w); + + w->base.message = w_tabbed_playlist_message; + return (ddb_gtkui_widget_t*)w; +} + +///// playlist widget + +ddb_gtkui_widget_t * +w_playlist_create (void) { + w_playlist_t *w = malloc (sizeof (w_playlist_t)); + memset (w, 0, sizeof (w_playlist_t)); + w->base.widget = ddb_listview_new (); + main_playlist_init (w->base.widget); + if (deadbeef->conf_get_int ("gtkui.headers.visible", 1)) { + ddb_listview_show_header (DDB_LISTVIEW (w->base.widget), 1); + } + else { + ddb_listview_show_header (DDB_LISTVIEW (w->base.widget), 0); + } + + w_override_signals (w->base.widget, w); + + w->base.message = w_tabbed_playlist_message; + return (ddb_gtkui_widget_t*)w; +} diff --git a/plugins/gtkui/widgets.h b/plugins/gtkui/widgets.h new file mode 100644 index 00000000..0d7eb21a --- /dev/null +++ b/plugins/gtkui/widgets.h @@ -0,0 +1,81 @@ +/* + DeaDBeeF - ultimate music player for GNU/Linux systems with X11 + Copyright (C) 2009-2011 Alexey Yakovenko <waker@users.sourceforge.net> + + 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 Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ +#ifndef __WIDGETS_H +#define __WIDGETS_H + +#include "gtkui_api.h" + +void +w_init (void); + +void +w_free (void); + +ddb_gtkui_widget_t * +w_get_rootwidget (void); + +void +w_set_design_mode (int active); + +void +w_reg_widget (const char *type, const char *title, ddb_gtkui_widget_t *(*create_func) (void)); + +void +w_unreg_widget (const char *type); + +ddb_gtkui_widget_t * +w_create (const char *type); + +void +w_destroy (ddb_gtkui_widget_t *w); + +void +w_append (ddb_gtkui_widget_t *cont, ddb_gtkui_widget_t *child); + +void +w_remove (ddb_gtkui_widget_t *cont, ddb_gtkui_widget_t *child); + +ddb_gtkui_widget_t * +w_hsplitter_create (void); + +ddb_gtkui_widget_t * +w_vsplitter_create (void); + +ddb_gtkui_widget_t * +w_box_create (void); + +ddb_gtkui_widget_t * +w_tabstrip_create (void); + +ddb_gtkui_widget_t * +w_tabbed_playlist_create (void); + +ddb_gtkui_widget_t * +w_playlist_create (void); + +ddb_gtkui_widget_t * +w_placeholder_create (void); + +ddb_gtkui_widget_t * +w_tabs_create (void); + +const char * +w_create_from_string (const char *s, ddb_gtkui_widget_t **parent); + +#endif diff --git a/plugins/hotkeys/hotkeys.c b/plugins/hotkeys/hotkeys.c index ded777de..e1357df8 100644 --- a/plugins/hotkeys/hotkeys.c +++ b/plugins/hotkeys/hotkeys.c @@ -621,7 +621,7 @@ static DB_hotkeys_plugin_t plugin = { .misc.plugin.type = DB_PLUGIN_MISC, .misc.plugin.id = "hotkeys", .misc.plugin.name = "Global hotkeys support", - .misc.plugin.descr = "Allows to control player with global hotkeys", + .misc.plugin.descr = "Allows one to control player with global hotkeys", .misc.plugin.copyright = "Copyright (C) 2009-2011 Alexey Yakovenko <waker@users.sourceforge.net>\n" "Copyright (C) 2009-2011 Viktor Semykin <thesame.ml@gmail.com>\n" diff --git a/plugins/mms/libmms/bswap.h b/plugins/mms/libmms/bswap.h index 6a6e1d10..7fe6db62 100644 --- a/plugins/mms/libmms/bswap.h +++ b/plugins/mms/libmms/bswap.h @@ -271,6 +271,17 @@ #define GINT16_TO_LE(val) (val) #endif +/* If this is not defined, we are on Solaris */ +#ifndef u_int16_t +#define u_int16_t uint16_t +#endif +#ifndef u_int32_t +#define u_int32_t uint32_t +#endif +#ifndef u_int64_t +#define u_int64_t uint64_t +#endif + #define LE_16(val) (GINT16_FROM_LE (*((u_int16_t*)(val)))) #define BE_16(val) (GINT16_FROM_BE (*((u_int16_t*)(val)))) #define LE_32(val) (GINT32_FROM_LE (*((u_int32_t*)(val)))) diff --git a/plugins/mono2stereo/Makefile b/plugins/mono2stereo/Makefile index 067f074d..0dceaa3a 100644 --- a/plugins/mono2stereo/Makefile +++ b/plugins/mono2stereo/Makefile @@ -1,4 +1,4 @@ -CC=gcc +CC?=gcc CFLAGS+=-Wall -fPIC -D_GNU_SOURCE -std=c99 @@ -8,7 +8,7 @@ SOURCES=mono2stereo.c OBJECTS=$(SOURCES:.c=.o) -OUT=mono2stereo.so +OUT?=ddb_mono2stereo.so all: $(SOURCES) $(OUT) diff --git a/plugins/mono2stereo/mono2stereo.c b/plugins/mono2stereo/mono2stereo.c index f10a9375..23d0b0d5 100644 --- a/plugins/mono2stereo/mono2stereo.c +++ b/plugins/mono2stereo/mono2stereo.c @@ -160,6 +160,7 @@ static DB_dsp_t plugin = { "along with this program; if not, write to the Free Software\n" "Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n" , + .plugin.website = "http://deadbeef.sf.net", .num_params = m2s_num_params, .get_param_name = m2s_get_param_name, .set_param = m2s_set_param, @@ -169,7 +170,7 @@ static DB_dsp_t plugin = { }; DB_plugin_t * -mono2stereo_load (DB_functions_t *f) { +ddb_mono2stereo_load (DB_functions_t *f) { deadbeef = f; return &plugin.plugin; } diff --git a/plugins/musepack/musepack.c b/plugins/musepack/musepack.c index e00f3d18..8144ac52 100644 --- a/plugins/musepack/musepack.c +++ b/plugins/musepack/musepack.c @@ -120,7 +120,8 @@ musepack_init (DB_fileinfo_t *_info, DB_playItem_t *it) { _info->fmt.bps = 32; _info->fmt.channels = info->si.channels; _info->fmt.samplerate = info->si.sample_freq; - for (int i = 0; i < _info->fmt.channels; i++) { + int i; + for (i = 0; i < _info->fmt.channels; i++) { _info->fmt.channelmask |= 1 << i; } _info->readpos = 0; diff --git a/plugins/shellexec/shellexec.c b/plugins/shellexec/shellexec.c index 8ecf223e..76d31e34 100644 --- a/plugins/shellexec/shellexec.c +++ b/plugins/shellexec/shellexec.c @@ -37,7 +37,9 @@ remote - command allowed only for non-local files disabled - ignore command */ - +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif #include <stdio.h> #include <string.h> #include <stdlib.h> diff --git a/plugins/shn/Makefile b/plugins/shn/Makefile index 7ce0e430..d76c8427 100644 --- a/plugins/shn/Makefile +++ b/plugins/shn/Makefile @@ -1,8 +1,9 @@ -OUT=shn.so +OUT=ddb_shn.so -CC=gcc +CC?=gcc -CFLAGS+=-Wall -fPIC -std=c99 -D_GNU_SOURCE -DHAVE_CONFIG_H -I. -I../.. +CFLAGS?=-I../.. +CFLAGS+=-Wall -fPIC -std=c99 -D_GNU_SOURCE -DHAVE_CONFIG_H -I. LDFLAGS+=-module -shared -lm diff --git a/plugins/shn/shn.c b/plugins/shn/shn.c index 881cf3b7..504f283c 100644 --- a/plugins/shn/shn.c +++ b/plugins/shn/shn.c @@ -23,7 +23,7 @@ #include <stdlib.h> #include <math.h> #include "shorten.h" -#include "../../deadbeef.h" +#include <deadbeef/deadbeef.h> #include "bitshift.h" //#define trace(...) { fprintf(stderr, __VA_ARGS__); } @@ -1836,7 +1836,7 @@ static DB_decoder_t plugin = { }; DB_plugin_t * -shn_load (DB_functions_t *api) { +ddb_shn_load (DB_functions_t *api) { deadbeef = api; return DB_PLUGIN (&plugin); } diff --git a/plugins/shn/shn.h b/plugins/shn/shn.h index 518334bc..e7d3bba8 100644 --- a/plugins/shn/shn.h +++ b/plugins/shn/shn.h @@ -28,7 +28,7 @@ #include <stdio.h> #include <unistd.h> #include <sys/stat.h> -#include "../../deadbeef.h" +#include <deadbeef/deadbeef.h> extern DB_functions_t *deadbeef; diff --git a/plugins/sid/csid.cpp b/plugins/sid/csid.cpp index b82491e7..24e812ff 100644 --- a/plugins/sid/csid.cpp +++ b/plugins/sid/csid.cpp @@ -22,10 +22,6 @@ #ifdef HAVE_CONFIG_H # include <config.h> #endif -#if HAVE_ICONV -#define LIBICONV_PLUG -#include <iconv.h> -#endif #include "sidplay/sidplay2.h" #include "sidplay/builders/resid.h" //#include "md5.h" @@ -414,33 +410,17 @@ csid_seek (DB_fileinfo_t *_info, float time) { } static const char * -convstr (const char* str) { -#ifdef HAVE_ICONV - int sz = strlen (str); - static char out[2048]; // FIXME: this is not thread-safe - const char *enc = "iso8859-1"; - iconv_t cd = iconv_open ("utf-8", enc); - if (cd == (iconv_t)-1) { - trace ("can't convert from %s to utf8\n", enc); - return NULL; +convstr (const char* str, int sz, char *out, int out_sz) { + const char *cs = deadbeef->junk_detect_charset (str); + if (!cs) { + return str; } else { - size_t inbytesleft = sz; - size_t outbytesleft = 2047; -#ifdef __linux__ - char *pin = (char*)str; -#else - const char *pin = str; -#endif - char *pout = out; - memset (out, 0, sizeof (out)); - size_t res = iconv (cd, &pin, &inbytesleft, &pout, &outbytesleft); - iconv_close (cd); + if (deadbeef->junk_iconv (str, sz, out, out_sz, cs, "utf-8") >= 0) { + return out; + } } - return out; -#else - return str; -#endif + return NULL; } extern "C" DB_playItem_t * @@ -522,6 +502,7 @@ csid_insert (ddb_playlist_t *plt, DB_playItem_t *after, const char *fname) { int i = sidinfo.numberOfInfoStrings; int title_added = 0; trace ("set %d metainfo...\n", s); + char temp[2048]; if (i >= 1 && sidinfo.infoString[0] && sidinfo.infoString[0][0]) { const char *meta; if (sidinfo.songs > 1) { @@ -531,19 +512,19 @@ csid_insert (ddb_playlist_t *plt, DB_playItem_t *after, const char *fname) { meta = "title"; title_added = 1; } - deadbeef->pl_add_meta (it, meta, convstr (sidinfo.infoString[0])); + deadbeef->pl_add_meta (it, meta, convstr (sidinfo.infoString[0], strlen (sidinfo.infoString[0]), temp, sizeof (temp))); } if (i >= 2 && sidinfo.infoString[1] && sidinfo.infoString[1][0]) { - deadbeef->pl_add_meta (it, "artist", convstr (sidinfo.infoString[1])); + deadbeef->pl_add_meta (it, "artist", convstr (sidinfo.infoString[1], strlen (sidinfo.infoString[1]), temp, sizeof (temp))); } if (i >= 3 && sidinfo.infoString[2] && sidinfo.infoString[2][0]) { - deadbeef->pl_add_meta (it, "copyright", convstr (sidinfo.infoString[2])); + deadbeef->pl_add_meta (it, "copyright", convstr (sidinfo.infoString[2], strlen (sidinfo.infoString[2]), temp, sizeof (temp))); } for (int j = 3; j < i; j++) { if (sidinfo.infoString[j] && sidinfo.infoString[j][0]) { - deadbeef->pl_add_meta (it, "info", convstr (sidinfo.infoString[j])); + deadbeef->pl_add_meta (it, "info", convstr (sidinfo.infoString[j], strlen (sidinfo.infoString[j]), temp, sizeof (temp))); } } char trk[10]; diff --git a/plugins/sndfile/sndfile.c b/plugins/sndfile/sndfile.c index 269cdd51..eae39b86 100644 --- a/plugins/sndfile/sndfile.c +++ b/plugins/sndfile/sndfile.c @@ -16,6 +16,9 @@ along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif #ifndef __linux__ #define _LARGEFILE64_SOURCE #endif @@ -308,6 +311,7 @@ sndfile_seek (DB_fileinfo_t *_info, float sec) { static DB_playItem_t * sndfile_insert (ddb_playlist_t *plt, DB_playItem_t *after, const char *fname) { + trace ("adding file %s\n", fname); SF_INFO inf; sndfile_info_t info; memset (&info, 0, sizeof (info)); @@ -317,12 +321,15 @@ sndfile_insert (ddb_playlist_t *plt, DB_playItem_t *after, const char *fname) { return NULL; } int64_t fsize = deadbeef->fgetlength (info.file); + trace ("file: %p, size: %lld\n", info.file, deadbeef->fgetlength (info.file)); + trace ("calling sf_open_virtual\n"); info.ctx = sf_open_virtual (&vfs, SFM_READ, &inf, &info); if (!info.ctx) { trace ("sndfile: sf_open failed"); deadbeef->fclose (info.file); return NULL; } + trace ("calling sf_open_virtual ok\n"); int totalsamples = inf.frames; int samplerate = inf.samplerate; sf_close (info.ctx); diff --git a/plugins/vfs_curl/vfs_curl.c b/plugins/vfs_curl/vfs_curl.c index 805f04f1..8a069300 100644 --- a/plugins/vfs_curl/vfs_curl.c +++ b/plugins/vfs_curl/vfs_curl.c @@ -611,7 +611,7 @@ http_thread_func (void *ctx) { if (*proxyuser || *proxypass) { #if LIBCURL_VERSION_MINOR >= 19 && LIBCURL_VERSION_PATCH >= 1 curl_easy_setopt (curl, CURLOPT_PROXYUSERNAME, proxyuser); - curl_easy_setopt (curl, CURLOPT_PROXYUSERNAME, proxypass); + curl_easy_setopt (curl, CURLOPT_PROXYPASSWORD, proxypass); #else char pwd[200]; snprintf (pwd, sizeof (pwd), "%s:%s", proxyuser, proxypass); @@ -784,7 +784,7 @@ http_read (void *ptr, size_t size, size_t nmemb, DB_FILE *stream) { } // trace ("buffer remaining: %d\n", fp->remaining); deadbeef->mutex_lock (fp->mutex); - trace ("http_read %lld/%lld/%d\n", fp->pos, fp->length, fp->remaining); + //trace ("http_read %lld/%lld/%d\n", fp->pos, fp->length, fp->remaining); int cp = min (sz, fp->remaining); int readpos = fp->pos & BUFFER_MASK; int part1 = BUFFER_SIZE-readpos; @@ -813,7 +813,7 @@ http_read (void *ptr, size_t size, size_t nmemb, DB_FILE *stream) { static int http_seek (DB_FILE *stream, int64_t offset, int whence) { - trace ("http_seek %lld %d\n", offset, whence); + //trace ("http_seek %lld %d\n", offset, whence); assert (stream); HTTP_FILE *fp = (HTTP_FILE *)stream; fp->seektoend = 0; diff --git a/plugins/vorbis/vorbis.c b/plugins/vorbis/vorbis.c index c85a0c63..f12123ee 100644 --- a/plugins/vorbis/vorbis.c +++ b/plugins/vorbis/vorbis.c @@ -15,6 +15,9 @@ You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif #include <vorbis/codec.h> #include <vorbis/vorbisfile.h> #include <string.h> @@ -23,9 +26,6 @@ #include <limits.h> #include <unistd.h> #include <math.h> -#ifdef HAVE_CONFIG_H -# include <config.h> -#endif #include "../../deadbeef.h" #include "vcedit.h" diff --git a/plugins/wildmidi/src/wildmidi_lib.c b/plugins/wildmidi/src/wildmidi_lib.c index 97912c50..66a2ca4a 100644 --- a/plugins/wildmidi/src/wildmidi_lib.c +++ b/plugins/wildmidi/src/wildmidi_lib.c @@ -137,7 +137,9 @@ ======================================== */ - +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif #include <ctype.h> #include <errno.h> #include <fcntl.h> @@ -155,7 +157,6 @@ #ifdef _WIN32 # include <windows.h> #endif -#include "config.h" #include "wildmidi_lib.h" /* @@ -8,19 +8,19 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-09 04:43+0000\n" -"PO-Revision-Date: 2010-08-30 11:05+0200\n" -"Last-Translator: Sander <celettu@gmail.com>\n" +"PO-Revision-Date: 2011-06-02 23:20+0200\n" +"Last-Translator: Pjotr <>\n" "Language-Team: Spanish\n" +"Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: nl\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Pootle 2.0.5\n" #: ../plugins/gtkui/callbacks.c:97 msgid "Supported sound formats" -msgstr "Ondersteunde geluidsformaten" +msgstr "Ondersteunde soorten bestandsopmaak voor geluid" #: ../plugins/gtkui/callbacks.c:108 msgid "Other files (*)" @@ -32,32 +32,32 @@ msgstr "Open bestand(en)..." #: ../plugins/gtkui/callbacks.c:151 msgid "Add file(s) to playlist..." -msgstr "Voeg bestand(en) toe aan de afspeellijst..." +msgstr "Voeg bestand(en) toe aan speellijst..." #: ../plugins/gtkui/callbacks.c:190 msgid "Add folder(s) to playlist..." -msgstr "Voeg map(pen) toe aan de afspeellijst..." +msgstr "Voeg map(pen) toe aan de speellijst..." #: ../plugins/gtkui/callbacks.c:192 msgid "Follow symlinks" -msgstr "" +msgstr "Volg symbolische koppelingen" #: ../plugins/gtkui/callbacks.c:667 msgid "Failed while reading help file" -msgstr "Fout bij het lezen van het help bestand" +msgstr "Fout bij lezen van hulpbestand" #: ../plugins/gtkui/callbacks.c:677 msgid "Failed to load help file" -msgstr "Fout bij het lezen van het help bestand" +msgstr "Kon hulpbestand niet laden" #: ../plugins/gtkui/callbacks.c:692 msgid "help.txt" -msgstr "" +msgstr "help.txt" #: ../plugins/gtkui/callbacks.c:693 ../plugins/gtkui/interface.c:1125 #: ../plugins/gtkui/deadbeef.glade.h:52 msgid "Help" -msgstr "Help" +msgstr "Hulp" #: ../plugins/gtkui/callbacks.c:703 #, c-format @@ -67,52 +67,53 @@ msgstr "Over DeaDBeeF %s" #: ../plugins/gtkui/callbacks.c:716 #, c-format msgid "DeaDBeeF %s ChangeLog" -msgstr "DeaDBeeF %s ChangeLog" +msgstr "DeaDBeeF %s Logboek van wijzigingen" #: ../plugins/gtkui/callbacks.c:1080 -#, fuzzy, c-format +#, c-format +#, c-format msgid "DeaDBeeF Translators" -msgstr "DeaDBeeF speelt nu af" +msgstr "DeaDBeeF Vertalers" #: ../plugins/gtkui/ddbtabstrip.c:626 msgid "Edit playlist" -msgstr "Bewerk afspeellijst" +msgstr "Bewerk speellijst" #: ../plugins/gtkui/ddbtabstrip.c:701 msgid "Rename Playlist" -msgstr "Hernoem Afspeellijst" +msgstr "Hernoem Speellijst" #: ../plugins/gtkui/ddbtabstrip.c:705 msgid "Remove Playlist" -msgstr "Verwijder Afspeellijst" +msgstr "Verwijder Speellijst" #: ../plugins/gtkui/ddbtabstrip.c:709 msgid "Add New Playlist" -msgstr "Maak nieuwe afspeellijst" +msgstr "Maak nieuwe speellijst" #: ../plugins/gtkui/eq.c:113 msgid "Save DeaDBeeF EQ Preset" -msgstr "Bewaar DeaDBeef EQ Preset" +msgstr "Bewaar DeaDBeef EQ Voorkeuze" #: ../plugins/gtkui/eq.c:120 msgid "DeaDBeeF EQ preset files (*.ddbeq)" -msgstr "DeaDBeef EQ preset bestanden (*.ddbeq)" +msgstr "DeaDBeef EQ voorkeuze-bestanden (*.ddbeq)" #: ../plugins/gtkui/eq.c:151 msgid "Load DeaDBeeF EQ Preset..." -msgstr "Laden DeaDBeeF EQ Preset..." +msgstr "Laden DeaDBeeF EQ Voorkeuze..." #: ../plugins/gtkui/eq.c:155 msgid "DeaDBeeF EQ presets (*.ddbeq)" -msgstr "DeaDBeeF EQ Presets (*.ddbeq)" +msgstr "DeaDBeeF EQ voorkeuzes (*.ddbeq)" #: ../plugins/gtkui/eq.c:214 msgid "Import Foobar2000 EQ Preset..." -msgstr "Importeer Foobar2000 EQ Preset..." +msgstr "Importeer Foobar2000 EQ Voorkeuze..." #: ../plugins/gtkui/eq.c:218 msgid "Foobar2000 EQ presets (*.feq)" -msgstr "Foobar2000 EQ presets (*.feq)" +msgstr "Foobar2000 EQ voorkeuzes (*.feq)" #: ../plugins/gtkui/eq.c:292 msgid "Enable" @@ -120,27 +121,27 @@ msgstr "Inschakelen" #: ../plugins/gtkui/eq.c:300 msgid "Zero All" -msgstr "Alles Dempen" +msgstr "Alles op nul" #: ../plugins/gtkui/eq.c:307 msgid "Zero Preamp" -msgstr "Preamp Dempen" +msgstr "Preamp op nul" #: ../plugins/gtkui/eq.c:314 msgid "Zero Bands" -msgstr "Bands Dempen" +msgstr "Banden op nul" #: ../plugins/gtkui/eq.c:321 msgid "Save Preset" -msgstr "Opslaan preset" +msgstr "Opslaan voorkeuze" #: ../plugins/gtkui/eq.c:328 msgid "Load Preset" -msgstr "Laden Preset" +msgstr "Laden Voorkeuze" #: ../plugins/gtkui/eq.c:335 msgid "Import Foobar2000 Preset" -msgstr "Importeer Foobar2000 Preset" +msgstr "Importeer Foobar2000 Voorkeuze" #: ../plugins/gtkui/gtkui.c:133 #, c-format @@ -155,7 +156,7 @@ msgstr "%d dagen %d:%02d:%02d" #: ../plugins/gtkui/gtkui.c:145 #, c-format msgid "Stopped | %d tracks | %s total playtime" -msgstr "Gestopt | %d titels | %s totale speeltijd" +msgstr "Gestopt | %d sporen | %s totale speeltijd" #: ../plugins/gtkui/gtkui.c:158 msgid "Mono" @@ -177,28 +178,29 @@ msgstr "Gepauzeerd | " #: ../plugins/gtkui/gtkui.c:190 #, c-format msgid "%s%s %s| %dHz | %d bit | %s | %d:%02d / %s | %d tracks | %s total playtime" -msgstr "%s%s %s| %dHz | %d bit | %s | %d:%02d / %s | %d titels | %s totale speeltijd" +msgstr "" +"%s%s %s| %dHz | %d bit | %s | %d:%02d / %s | %d sporen | %s totale speeltijd" #: ../plugins/gtkui/gtkui.c:661 msgid "Save Playlist As" -msgstr "Afspeellijst opslaan als" +msgstr "Speellijst opslaan als" #: ../plugins/gtkui/gtkui.c:670 ../plugins/gtkui/gtkui.c:731 msgid "DeaDBeeF playlist files (*.dbpl)" -msgstr "DeaDBeeF afspeellijst bestand (*.dbpl)" +msgstr "DeaDBeeF speellijstbestanden (*.dbpl)" #: ../plugins/gtkui/gtkui.c:724 msgid "Load Playlist" -msgstr "Afspeellijst laden" +msgstr "Speellijst laden" #: ../plugins/gtkui/gtkui.c:864 msgid "New Playlist" -msgstr "Nieuwe afspeellijst" +msgstr "Nieuwe Speellijst" #: ../plugins/gtkui/gtkui.c:867 #, c-format msgid "New Playlist (%d)" -msgstr "Nieuwe afspeellijst (%d)" +msgstr "Nieuwe Speellijst (%d)" #: ../plugins/gtkui/interface.c:142 ../plugins/gtkui/deadbeef.glade.h:152 msgid "_File" @@ -223,19 +225,19 @@ msgstr "Voeg locatie toe" #: ../plugins/gtkui/interface.c:190 ../plugins/gtkui/deadbeef.glade.h:82 msgid "New playlist" -msgstr "Nieuwe afspeellijst" +msgstr "Nieuwe speellijst" #: ../plugins/gtkui/interface.c:197 ../plugins/gtkui/deadbeef.glade.h:74 msgid "Load playlist" -msgstr "Laad afspeellijst" +msgstr "Laad speellijst" #: ../plugins/gtkui/interface.c:201 ../plugins/gtkui/deadbeef.glade.h:111 msgid "Save playlist" -msgstr "Afspeellijst opslaan" +msgstr "Speellijst opslaan" #: ../plugins/gtkui/interface.c:205 ../plugins/gtkui/deadbeef.glade.h:112 msgid "Save playlist as" -msgstr "Afspeellijst opslaan als.." +msgstr "Speellijst opslaan als" #: ../plugins/gtkui/interface.c:214 ../plugins/gtkui/deadbeef.glade.h:160 msgid "_Quit" @@ -272,7 +274,7 @@ msgstr "Verwijderen" #: ../plugins/gtkui/interface.c:273 ../plugins/gtkui/deadbeef.glade.h:18 msgid "Crop" -msgstr "verkleinen" +msgstr "Bijsnijden" #: ../plugins/gtkui/interface.c:277 ../plugins/gtkui/deadbeef.glade.h:153 msgid "_Find" @@ -293,7 +295,7 @@ msgstr "Statusbalk" #: ../plugins/gtkui/interface.c:304 ../plugins/gtkui/deadbeef.glade.h:16 msgid "Column headers" -msgstr "Kolom headers" +msgstr "Kolomkoppen" #: ../plugins/gtkui/interface.c:308 ../plugins/gtkui/deadbeef.glade.h:129 msgid "Tabs" @@ -305,7 +307,7 @@ msgstr "Equalizer" #: ../plugins/gtkui/interface.c:316 ../plugins/gtkui/deadbeef.glade.h:159 msgid "_Playback" -msgstr "_Playback" +msgstr "_Afspelen" #: ../plugins/gtkui/interface.c:323 ../plugins/gtkui/deadbeef.glade.h:85 msgid "Order" @@ -317,7 +319,7 @@ msgstr "Lineair" #: ../plugins/gtkui/interface.c:336 ../plugins/gtkui/deadbeef.glade.h:120 msgid "Shuffle" -msgstr "Willekeurig" +msgstr "Schuffelen" #: ../plugins/gtkui/interface.c:342 ../plugins/gtkui/deadbeef.glade.h:105 msgid "Random" @@ -325,52 +327,52 @@ msgstr "Willekeurig" #: ../plugins/gtkui/interface.c:348 ../plugins/gtkui/deadbeef.glade.h:77 msgid "Looping" -msgstr "Herhalen" +msgstr "Herhalend" #: ../plugins/gtkui/interface.c:355 ../plugins/gtkui/deadbeef.glade.h:75 msgid "Loop All" -msgstr "Alles herhalen" +msgstr "Alles herhalend" #: ../plugins/gtkui/interface.c:361 ../plugins/gtkui/deadbeef.glade.h:76 msgid "Loop Single Song" -msgstr "Nummer herhalen" +msgstr "Enkel nummer herhalend" #: ../plugins/gtkui/interface.c:367 ../plugins/gtkui/deadbeef.glade.h:27 msgid "Don't Loop" -msgstr "Niet herhalen" +msgstr "Niet telkens herhalen" #: ../plugins/gtkui/interface.c:373 ../plugins/gtkui/deadbeef.glade.h:113 msgid "Scroll follows playback" -msgstr "Scroll volgt afgespeeld nummer" +msgstr "Bladeren volgt afspelen" #: ../plugins/gtkui/interface.c:378 ../plugins/gtkui/deadbeef.glade.h:20 msgid "Cursor follows playback" -msgstr "Cursor volgt afgespeeld nummer" +msgstr "Aanwijzer volgt afspelen" #: ../plugins/gtkui/interface.c:382 ../plugins/gtkui/deadbeef.glade.h:124 msgid "Stop after current" -msgstr "Stop met afspelen na huidig" +msgstr "Stop na huidig" #: ../plugins/gtkui/interface.c:394 ../plugins/gtkui/deadbeef.glade.h:69 msgid "Jump to current track" -msgstr "" +msgstr "Spring naar huidige spoor" #: ../plugins/gtkui/interface.c:401 ../plugins/gtkui/interface.c:408 #: ../plugins/gtkui/deadbeef.glade.h:155 msgid "_Help" -msgstr "_Help" +msgstr "_Hulp" #: ../plugins/gtkui/interface.c:416 ../plugins/gtkui/deadbeef.glade.h:148 msgid "_ChangeLog" -msgstr "_ChangeLog" +msgstr "_Logboek van wijzigingen" #: ../plugins/gtkui/interface.c:425 ../plugins/gtkui/deadbeef.glade.h:154 msgid "_GPLv2" -msgstr "" +msgstr "_GPLv2" #: ../plugins/gtkui/interface.c:429 ../plugins/gtkui/deadbeef.glade.h:156 msgid "_LGPLv2.1" -msgstr "" +msgstr "LGPLv2.1" #: ../plugins/gtkui/interface.c:438 ../plugins/gtkui/deadbeef.glade.h:145 msgid "_About" @@ -378,7 +380,7 @@ msgstr "_Over" #: ../plugins/gtkui/interface.c:446 ../plugins/gtkui/deadbeef.glade.h:161 msgid "_Translators" -msgstr "" +msgstr "_Vertalers" #: ../plugins/gtkui/interface.c:836 ../plugins/gtkui/deadbeef.glade.h:114 msgid "Search" @@ -406,7 +408,7 @@ msgstr "Volgende" #: ../plugins/gtkui/interface.c:951 ../plugins/gtkui/deadbeef.glade.h:92 msgid "Play Random" -msgstr "Willekeurig afspelen " +msgstr "Willekeurig afspelen" #: ../plugins/gtkui/interface.c:960 ../plugins/gtkui/deadbeef.glade.h:3 msgid "About" @@ -418,7 +420,7 @@ msgstr "Afsluiten" #: ../plugins/gtkui/interface.c:1045 ../plugins/gtkui/deadbeef.glade.h:8 msgid "Adding files..." -msgstr "Toevoegen van bestanden..." +msgstr "Bestanden aan het toevoegen..." #: ../plugins/gtkui/interface.c:1089 ../plugins/gtkui/deadbeef.glade.h:144 msgid "_Abort" @@ -426,7 +428,7 @@ msgstr "_Afbreken" #: ../plugins/gtkui/interface.c:1189 ../plugins/gtkui/deadbeef.glade.h:135 msgid "Track Properties" -msgstr "Titel eigenschappen" +msgstr "Eigenschappen van spoor" #: ../plugins/gtkui/interface.c:1235 ../plugins/gtkui/deadbeef.glade.h:146 msgid "_Apply" @@ -439,7 +441,7 @@ msgstr "_Sluiten" #: ../plugins/gtkui/interface.c:1260 ../plugins/gtkui/deadbeef.glade.h:78 msgid "Metadata" -msgstr "Metadata" +msgstr "Bijkomende gegevens" #: ../plugins/gtkui/interface.c:1306 ../plugins/gtkui/plcommon.c:504 #: ../plugins/gtkui/deadbeef.glade.h:98 @@ -457,7 +459,7 @@ msgstr "Titel:" #: ../plugins/gtkui/interface.c:1414 ../plugins/gtkui/deadbeef.glade.h:30 msgid "Enter new column title here" -msgstr "Voer een nieuwe column titel in" +msgstr "Voer hier een nieuwe kolomtitel in" #: ../plugins/gtkui/interface.c:1422 ../plugins/gtkui/deadbeef.glade.h:136 msgid "Type:" @@ -465,7 +467,7 @@ msgstr "Type:" #: ../plugins/gtkui/interface.c:1430 msgid "Item Index" -msgstr "" +msgstr "Index van elementen" #. create default set of columns #: ../plugins/gtkui/interface.c:1431 ../plugins/gtkui/mainplaylist.c:305 @@ -474,7 +476,7 @@ msgstr "Aan het afspelen" #: ../plugins/gtkui/interface.c:1432 msgid "Album Art" -msgstr "Albumhoes" +msgstr "Albumkunst" #: ../plugins/gtkui/interface.c:1433 msgid "Artist - Album" @@ -501,11 +503,11 @@ msgstr "Lengte" #: ../plugins/gtkui/interface.c:1438 ../plugins/gtkui/interface.c:1821 msgid "Track" -msgstr "Titel" +msgstr "Spoor" #: ../plugins/gtkui/interface.c:1439 ../translation/extra.c:58 msgid "Band / Album Artist" -msgstr "Band / Album Artiest" +msgstr "Groep / Album Artiest" #: ../plugins/gtkui/interface.c:1440 ../plugins/gtkui/plcommon.c:882 msgid "Custom" @@ -514,11 +516,11 @@ msgstr "Aangepast" #: ../plugins/gtkui/interface.c:1446 ../plugins/gtkui/interface.c:3124 #: ../plugins/gtkui/deadbeef.glade.h:49 msgid "Format:" -msgstr "Formaat:" +msgstr "Opmaaktype:" #: ../plugins/gtkui/interface.c:1461 ../plugins/gtkui/deadbeef.glade.h:9 msgid "Alignment:" -msgstr "Uitlijning" +msgstr "Uitlijning:" #: ../plugins/gtkui/interface.c:1469 msgid "Left" @@ -529,7 +531,8 @@ msgid "Right" msgstr "Rechts" #: ../plugins/gtkui/interface.c:1472 ../plugins/gtkui/deadbeef.glade.h:35 -#, fuzzy, no-c-format +#, no-c-format +#, no-c-format msgid "" "Format conversions (start with %):\n" " [a]rtist, [t]itle, al[b]um, [B]and, [C]omposer\n" @@ -540,10 +543,11 @@ msgid "" "Example: %a - %t [%l]" msgstr "" "Formatteer conversies (begin met %):\n" -"[a]rtiest, [t]itel, al[b]um, [B]and, [C]omposer\n" -"titel[n]ummer, [N]totaltracks,\n" -"[d]uur, [j]aar, [g]enre, [c]ommentaar,\n" -"copy[r]echt, [b]estandnaam, [T]ags\n" +" [a]rtiest, [t]itel, al[b]um, [B]and, [C]omponist\n" +" spoor[n]ummer, [N]totaltracks,\n" +" [l]engte, [y]jaar, [g]enre, [c]ommentaar,\n" +" auteurs[r]echt, [b]estandnaam, [T]ags,\n" +" [d]map, [D]MapMetPad\n" "Bijvoorbeeld: %a - %t [%l]" #: ../plugins/gtkui/interface.c:1501 ../plugins/gtkui/interface.c:2928 @@ -556,15 +560,15 @@ msgstr "_Annuleer" #: ../plugins/gtkui/interface.c:3061 ../plugins/gtkui/interface.c:3184 #: ../plugins/gtkui/deadbeef.glade.h:157 msgid "_OK" -msgstr "_Accepteer" +msgstr "_OK" #: ../plugins/gtkui/interface.c:1753 ../plugins/gtkui/deadbeef.glade.h:87 msgid "Output plugin:" -msgstr "Output plugin: " +msgstr "Uitvoerplugin:" #: ../plugins/gtkui/interface.c:1766 ../plugins/gtkui/deadbeef.glade.h:86 msgid "Output device:" -msgstr "Output apparaat:" +msgstr "Uitvoerapparaat:" #: ../plugins/gtkui/interface.c:1775 ../plugins/gtkui/deadbeef.glade.h:121 msgid "Sound" @@ -572,15 +576,15 @@ msgstr "Geluid" #: ../plugins/gtkui/interface.c:1784 ../plugins/gtkui/deadbeef.glade.h:10 msgid "Allow dynamic samplerate switching" -msgstr "Dynamic samplerate switching toestaan" +msgstr "Dynamische samplerate-wisseling toestaan" #: ../plugins/gtkui/interface.c:1792 ../plugins/gtkui/deadbeef.glade.h:110 msgid "Samplerate conversion quality:" -msgstr "Samplerate conversie kwaliteit:" +msgstr "Samplerate-conversiekwaliteit:" #: ../plugins/gtkui/interface.c:1811 ../plugins/gtkui/deadbeef.glade.h:107 msgid "Replaygain mode:" -msgstr "Replaygain mode:" +msgstr "Replaygain modus:" #: ../plugins/gtkui/interface.c:1820 msgid "Disable" @@ -588,52 +592,53 @@ msgstr "Uitschakelen" #: ../plugins/gtkui/interface.c:1824 ../plugins/gtkui/deadbeef.glade.h:108 msgid "Replaygain peak scale" -msgstr "Replaygain piek scale" +msgstr "Replaygain piek schaal" #: ../plugins/gtkui/interface.c:1832 ../plugins/gtkui/deadbeef.glade.h:5 msgid "Add files from command line (or file manager) to this playlist:" msgstr "" +"Voeg bestanden toe vanaf de opdrachtregel (of met de bestandbeheerder) aan " +"deze speellijst:" #: ../plugins/gtkui/interface.c:1841 ../plugins/gtkui/deadbeef.glade.h:109 msgid "Resume previous session on startup" -msgstr "" +msgstr "Hervat vorige sessie bij opstarten" #: ../plugins/gtkui/interface.c:1845 ../plugins/gtkui/deadbeef.glade.h:93 -#, fuzzy msgid "Playback" -msgstr "_Playback" +msgstr "Afspelen" #: ../plugins/gtkui/interface.c:1854 ../plugins/gtkui/deadbeef.glade.h:14 msgid "Close minimizes to tray" -msgstr "Sluiten minimaliseert naar tray" +msgstr "Sluiten minimaliseert naar systeemvak" #: ../plugins/gtkui/interface.c:1858 ../plugins/gtkui/deadbeef.glade.h:80 msgid "Middle mouse button closes playlist" -msgstr "Middelste muisknop sluit afspeellijst" +msgstr "Middelste muisknop sluit speellijst" #: ../plugins/gtkui/interface.c:1862 ../plugins/gtkui/deadbeef.glade.h:54 msgid "Hide system tray icon" -msgstr "" +msgstr "Verberg systeemvakpictogram" #: ../plugins/gtkui/interface.c:1866 ../plugins/gtkui/deadbeef.glade.h:138 msgid "Use bold font for currently playing track" -msgstr "" +msgstr "Gebruik vetgedrukt lettertype voor het thans afspelende spoor" #: ../plugins/gtkui/interface.c:1870 ../plugins/gtkui/deadbeef.glade.h:53 msgid "Hide \"Delete from disk\" context menu item" -msgstr "" +msgstr "Verberg \"Verwijder van schijf\"-element in het contekstmenu" #: ../plugins/gtkui/interface.c:1878 ../plugins/gtkui/deadbeef.glade.h:133 msgid "Titlebar text while playing:" -msgstr "" +msgstr "Titelbalktekst gedurende afspelen:" #: ../plugins/gtkui/interface.c:1892 ../plugins/gtkui/deadbeef.glade.h:134 msgid "Titlebar text while stopped:" -msgstr "" +msgstr "Titelbalktekst wanneer gestopt:" #: ../plugins/gtkui/interface.c:1902 ../plugins/gtkui/deadbeef.glade.h:50 msgid "GUI" -msgstr "Interface" +msgstr "Gebruikersomgeving" #: ../plugins/gtkui/interface.c:1916 ../plugins/gtkui/interface.c:1960 #: ../plugins/gtkui/deadbeef.glade.h:88 @@ -650,7 +655,7 @@ msgstr "Achtergrond" #: ../plugins/gtkui/interface.c:1951 ../plugins/gtkui/deadbeef.glade.h:115 msgid "Seekbar/Volumebar colors" -msgstr "Kleuren zoekbar/volumebar" +msgstr "Kleuren Zoekbalk/Volumebalk" #: ../plugins/gtkui/interface.c:1969 ../plugins/gtkui/deadbeef.glade.h:79 msgid "Middle" @@ -666,23 +671,23 @@ msgstr "Donker" #: ../plugins/gtkui/interface.c:2014 ../plugins/gtkui/deadbeef.glade.h:13 msgid "Base" -msgstr "Achtergrond" +msgstr "Basis" #: ../plugins/gtkui/interface.c:2021 ../plugins/gtkui/deadbeef.glade.h:128 msgid "Tab strip colors" -msgstr "Tab kleuren" +msgstr "Tabstrook-kleuren" #: ../plugins/gtkui/interface.c:2030 ../plugins/gtkui/deadbeef.glade.h:89 msgid "Override (looses GTK treeview theming, but speeds up rendering)" -msgstr "Negeer (sneller, maar geen GTK boomstructuur grafisch thema)" +msgstr "Negeer (geen boomstructuurthema, maar snellere weergave)" #: ../plugins/gtkui/interface.c:2039 ../plugins/gtkui/deadbeef.glade.h:32 msgid "Even row" -msgstr "Even rijen" +msgstr "Even rij" #: ../plugins/gtkui/interface.c:2046 ../plugins/gtkui/deadbeef.glade.h:84 msgid "Odd row" -msgstr "Oneven rijen" +msgstr "Oneven rij" #: ../plugins/gtkui/interface.c:2065 ../plugins/gtkui/deadbeef.glade.h:131 msgid "Text" @@ -694,19 +699,19 @@ msgstr "Geselecteerde rij" #: ../plugins/gtkui/interface.c:2091 ../plugins/gtkui/deadbeef.glade.h:118 msgid "Selected text" -msgstr "Geselecteerde text" +msgstr "Geselecteerde tekst" #: ../plugins/gtkui/interface.c:2104 ../plugins/gtkui/deadbeef.glade.h:19 msgid "Cursor" -msgstr "Muisaanwijzer" +msgstr "Aanwijzer" #: ../plugins/gtkui/interface.c:2117 ../plugins/gtkui/deadbeef.glade.h:94 msgid "Playlist colors" -msgstr "Playlist kleuren" +msgstr "Speellijst-kleuren" #: ../plugins/gtkui/interface.c:2121 ../plugins/gtkui/deadbeef.glade.h:15 msgid "Colors" -msgstr "" +msgstr "Kleuren" #: ../plugins/gtkui/interface.c:2130 ../plugins/gtkui/deadbeef.glade.h:29 msgid "Enable Proxy Server" @@ -722,7 +727,7 @@ msgstr "Proxy Server Poort:" #: ../plugins/gtkui/interface.c:2166 ../plugins/gtkui/deadbeef.glade.h:102 msgid "Proxy Type:" -msgstr "Proxy type" +msgstr "Proxy Type:" #: ../plugins/gtkui/interface.c:2185 ../plugins/gtkui/deadbeef.glade.h:103 msgid "Proxy Username:" @@ -730,7 +735,7 @@ msgstr "Proxy Gebruikersnaam:" #: ../plugins/gtkui/interface.c:2198 ../plugins/gtkui/deadbeef.glade.h:99 msgid "Proxy Password:" -msgstr "Proxy wachtwoord:" +msgstr "Proxy Wachtwoord:" #: ../plugins/gtkui/interface.c:2208 ../plugins/gtkui/deadbeef.glade.h:81 msgid "Network" @@ -779,7 +784,7 @@ msgstr "2.4" #: ../plugins/gtkui/interface.c:2282 ../plugins/gtkui/deadbeef.glade.h:55 msgid "ID3v1 character encoding (default is iso8859-1)" -msgstr "ID3v1 karakter codering (default is iso8859-1)" +msgstr "ID3v1 tekencodering (standaard is iso8859-1)" #: ../plugins/gtkui/interface.c:2319 ../plugins/gtkui/deadbeef.glade.h:143 msgid "Write ID3v2.4" @@ -787,7 +792,7 @@ msgstr "ID3v2.4 schrijven" #: ../plugins/gtkui/interface.c:2388 ../plugins/gtkui/deadbeef.glade.h:130 msgid "Tag writer" -msgstr "Tag schrijver" +msgstr "Etiketschrijver" #: ../plugins/gtkui/interface.c:2419 ../plugins/gtkui/deadbeef.glade.h:22 msgid "Description:" @@ -795,15 +800,15 @@ msgstr "Beschrijving:" #: ../plugins/gtkui/interface.c:2434 ../plugins/gtkui/deadbeef.glade.h:11 msgid "Author(s):" -msgstr "Auteur:" +msgstr "Auteur(s):" #: ../plugins/gtkui/interface.c:2449 ../plugins/gtkui/deadbeef.glade.h:28 msgid "Email:" -msgstr "Email:" +msgstr "E-mail:" #: ../plugins/gtkui/interface.c:2464 ../plugins/gtkui/deadbeef.glade.h:139 msgid "Website:" -msgstr "Website:" +msgstr "Webstek:" #: ../plugins/gtkui/interface.c:2495 ../plugins/gtkui/deadbeef.glade.h:17 msgid "Configure" @@ -823,7 +828,7 @@ msgstr "URL:" #: ../plugins/gtkui/interface.c:3109 ../plugins/gtkui/deadbeef.glade.h:51 msgid "Group By" -msgstr "Grouperen volgens" +msgstr "Groeperen op" #: ../plugins/gtkui/interface.c:3134 ../plugins/gtkui/deadbeef.glade.h:43 #, no-c-format @@ -836,10 +841,10 @@ msgid "" "Example: %a - %t [%l]" msgstr "" "Formatteer conversies (begin met %):\n" -"[a]rtiest, [t]itel, al[b]um, [B]and, [C]omposer\n" -"titel[n]ummer, [N]totaltracks,\n" -"[d]uur, [j]aar, [g]enre, [c]ommentaar,\n" -"copy[r]echt, [b]estandnaam, [T]ags\n" +" [a]rtiest, [t]itel, al[b]um, [B]and, [C]omponist\n" +" spoor[n]ummer, [N]totaltracks,\n" +" [d]uur, [j]aar, [g]enre, [c]ommentaar,\n" +" auteurs[r]echt, [b]estandnaam, [T]ags\n" "Bijvoorbeeld: %a - %t [%l]" #: ../plugins/gtkui/mainplaylist.c:306 ../plugins/gtkui/search.c:439 @@ -848,16 +853,16 @@ msgstr "Artiest / Album" #: ../plugins/gtkui/mainplaylist.c:307 ../plugins/gtkui/search.c:440 msgid "Track No" -msgstr "Title nr." +msgstr "Spoornr." #: ../plugins/gtkui/mainplaylist.c:308 ../plugins/gtkui/search.c:441 msgid "Title / Track Artist" -msgstr "Titel / Titel Artiest" +msgstr "Titel / Spoor Artiest" #: ../plugins/gtkui/mainplaylist.c:309 ../plugins/gtkui/search.c:442 #: ../plugins/gtkui/trkproperties.c:175 msgid "Duration" -msgstr "Speeltijd" +msgstr "Duur" #: ../plugins/gtkui/plcommon.c:324 msgid "Delete files from disk" @@ -868,8 +873,8 @@ msgid "" "Files will be lost. Proceed?\n" "(This dialog can be turned off in GTKUI plugin settings)" msgstr "" -"Bestanden zullen verloren worden. Doorgaan?\n" -"(Dit venster kunt u uitschakelen in de GTKUI plugin instellingen)" +"Bestanden zullen verloren gaan. Doorgaan?\n" +"(Dit venster kunt u uitschakelen in de GTKUI plugin-instellingen)" #: ../plugins/gtkui/plcommon.c:326 ../plugins/gtkui/trkproperties.c:56 msgid "Warning" @@ -877,15 +882,15 @@ msgstr "Waarschuwing" #: ../plugins/gtkui/plcommon.c:402 msgid "Add to playback queue" -msgstr "Aan de wachtrij toevoegen" +msgstr "Aan de speelwachtrij toevoegen" #: ../plugins/gtkui/plcommon.c:407 msgid "Remove from playback queue" -msgstr "Van wachtrij verwijderen" +msgstr "Uit speelwachtrij verwijderen" #: ../plugins/gtkui/plcommon.c:415 msgid "Reload metadata" -msgstr "Herlaad metadata" +msgstr "Herlaad bijkomende gegevens" #: ../plugins/gtkui/plcommon.c:434 msgid "Remove from disk" @@ -905,7 +910,7 @@ msgstr "Kolom verwijderen" #: ../plugins/gtkui/plcommon.c:863 msgid "Group by" -msgstr "Grouperen volgens" +msgstr "Groeperen op" #: ../plugins/gtkui/plcommon.c:870 msgid "None" @@ -926,7 +931,7 @@ msgstr "Configuratie %s" #: ../plugins/gtkui/prefwin.c:99 msgid "Default Audio Device" -msgstr "Standaard Geluids Apparaat" +msgstr "Standaard Geluidsapparaat" #: ../plugins/gtkui/prefwin.c:329 msgid "Add" @@ -934,11 +939,11 @@ msgstr "Toevoegen" #: ../plugins/gtkui/prefwin.c:339 msgid "Global Hotkeys" -msgstr "Globale sneltoetsen" +msgstr "Globale Sneltoetsen" #: ../plugins/gtkui/prefwin.c:401 msgid "Slot" -msgstr "Sleuf" +msgstr "Gleuf" #: ../plugins/gtkui/prefwin.c:402 msgid "Key combination" @@ -948,36 +953,35 @@ msgstr "Toetscombinatie" #: ../plugins/gtkui/prefwin.c:481 ../plugins/gtkui/prefwin.c:693 #: ../plugins.c:873 msgid "ALSA output plugin" -msgstr "ALSA output plugin" +msgstr "ALSA uitvoer-plugin" #: ../plugins/gtkui/progress.c:64 msgid "Initializing..." -msgstr "Initialiseren..." +msgstr "Aan het initialiseren..." #: ../plugins/gtkui/trkproperties.c:53 msgid "You've modified data for this track." -msgstr "U heeft data aangepast voor deze track." +msgstr "U heeft gegevens aangepast voor dit spoor." #: ../plugins/gtkui/trkproperties.c:55 msgid "Really close the window?" -msgstr "Weet u zeker dat u dit venster wilt sluiten?" +msgstr "Dit venster echt sluiten?" #: ../plugins/gtkui/trkproperties.c:169 -#, fuzzy msgid "Location" -msgstr "Voeg locatie toe" +msgstr "Locatie" #: ../plugins/gtkui/trkproperties.c:172 msgid "Subtrack Index" -msgstr "" +msgstr "Subspoor-index" #: ../plugins/gtkui/trkproperties.c:178 msgid "Tag Type(s)" -msgstr "Tag type(s)" +msgstr "Etiket-type(s)" #: ../plugins/gtkui/trkproperties.c:180 msgid "Embedded Cuesheet" -msgstr "Ingebedde cuesheet" +msgstr "Ingebedde Informatietekst" #: ../plugins/gtkui/trkproperties.c:180 msgid "Yes" @@ -989,7 +993,7 @@ msgstr "Nee" #: ../plugins/gtkui/trkproperties.c:182 msgid "Codec" -msgstr "" +msgstr "Codec" #: ../plugins/gtkui/trkproperties.c:250 ../plugins/gtkui/trkproperties.c:262 msgid "Key" @@ -1001,7 +1005,7 @@ msgstr "Waarde" #: ../plugins/notify/notify.c:138 msgid "DeaDBeeF now playing" -msgstr "DeaDBeeF speelt nu af" +msgstr "DeaDBeeF is nu aan het spelen" #: ../main.c:89 #, c-format @@ -1016,57 +1020,57 @@ msgstr "Opties:\n" #: ../main.c:91 #, c-format msgid " --help or -h Print help (this message) and exit\n" -msgstr "--help or -h Toont help (deze boodschap) en exit\n" +msgstr " --help or -h Drukt hulp af (dit bericht) en sluit af\n" #: ../main.c:92 #, c-format msgid " --quit Quit player\n" -msgstr "--quit Speler afsluiten\n" +msgstr " --quit Speler afsluiten\n" #: ../main.c:93 #, c-format msgid " --version Print version info and exit\n" -msgstr "--version Versie info tonenen exit\n" +msgstr " --version Versie-informatie afdrukken en sluiten\n" #: ../main.c:94 #, c-format msgid " --play Start playback\n" -msgstr "--play Playback starten\n" +msgstr " --play Afspelen beginnen\n" #: ../main.c:95 #, c-format msgid " --stop Stop playback\n" -msgstr "--stop Playback stoppen\n" +msgstr " --stop Afspelen stoppen\n" #: ../main.c:96 #, c-format msgid " --pause Pause playback\n" -msgstr "--pause Playback pauzeren\n" +msgstr " --pause Afspelen pauzeren\n" #: ../main.c:97 #, c-format msgid " --next Next song in playlist\n" -msgstr "--next Volgend nummer in afspeellijstt\n" +msgstr " --next Volgend nummer in speellijst\n" #: ../main.c:98 #, c-format msgid " --prev Previous song in playlist\n" -msgstr "--prev Vorig nummer in afspeellijst\n" +msgstr " --prev Vorig nummer in speellijst\n" #: ../main.c:99 #, c-format msgid " --random Random song in playlist\n" -msgstr "--random Willekeurig nummer in afspeellijst\n" +msgstr " --random Willekeurig nummer in speellijst\n" #: ../main.c:100 #, c-format msgid " --queue Append file(s) to existing playlist\n" -msgstr "--queue Bestand(en) toevoegen aan afspeellijst\n" +msgstr " --queue Bestand(en) toevoegen aan speellijst\n" #: ../main.c:101 #, c-format msgid " --nowplaying FMT Print formatted track name to stdout\n" -msgstr "--nowplaying FMT Afdrukken geformatteerde track naam naar stdout\n" +msgstr " --nowplaying FMT Afdrukken geformatteerde spoornaam naar stdout\n" #: ../main.c:102 #, c-format @@ -1075,14 +1079,15 @@ msgid "" " [l]ength, track[n]umber, [y]ear, [c]omment,\n" " copy[r]ight, [e]lapsed\n" msgstr "" -"FMT %%-syntax: [a]rtist, [t]itle, al[b]um,\n" -"[l]ength, track[n]umber, [y]ear, [c]omment,\n" -"copy[r]ight, [e]lapsed\n" +" FMT %%-syntax: [a]rtist, [t]itle, al[b]um,\n" +" [l]ength, track[n]umber, [y]ear, [c]omment,\n" +" copy[r]ight, [e]lapsed\n" #: ../main.c:105 #, c-format msgid " e.g.: --nowplaying \"%%a - %%t\" should print \"artist - title\"\n" -msgstr "e.g.: --nowplaying \"%%a - %%t\" toont \"artist - title\"\n" +msgstr " e.g.: --nowplaying \"%%a - %%t\" should print \"artist - " +"title\"\n" #: ../playlist.c:377 ../playlist.c:2289 msgid "Default" @@ -1103,11 +1108,10 @@ msgid "" "Album" msgstr "" "Zet uit\n" -"Nummer\n" +"Spoor\n" "Album" #: ../plugins/gtkui/deadbeef.glade.h:58 -#, fuzzy msgid "" "Item Index\n" "Playing\n" @@ -1121,9 +1125,9 @@ msgid "" "Band / Album Artist\n" "Custom" msgstr "" -"Bestandsnummer\n" -"Speelt af\n" -"Album Art\n" +"Elementen Index\n" +"Aan het afspelen\n" +"Album Kunst\n" "Artiest - Album\n" "Artiest\n" "Album\n" @@ -1144,232 +1148,226 @@ msgstr "" #: ../plugins/gtkui/support.c:90 ../plugins/gtkui/support.c:114 #, c-format msgid "Couldn't find pixmap file: %s" -msgstr "Kon geen pixmap bestand vinden: %s" +msgstr "Kon geen pixmapbestand vinden: %s" #: ../plugins/wildmidi/wildmidiplug.c:162 #, c-format msgid "wildmidi: freepats config file not found. Please install timidity-freepats package, or specify path to freepats.cfg in the plugin settings." msgstr "" +"wildmidi: configuratiebestand voor freepats niet gevonden. Installeer " +"timidity-freepats-pakket, of specificeer pad naar freepats.cfg in de plugin-" +"instellingen" #. this file should list extra translatable strings that are not referenced #. directly in source code, e.g. scripted plugin configuration strings #: ../translation/extra.c:3 msgid "Add Audio CD" -msgstr "Voeg Audio CD toe" +msgstr "Voeg Geluids-CD toe" #: ../translation/extra.c:4 msgid "Lookup on Last.fm" -msgstr "" +msgstr "Zoek het op, op Last.fm" #. ALSA output plugin #: ../translation/extra.c:6 msgid "Use ALSA resampling" -msgstr "" +msgstr "Gebruik ALSA-resampling" #: ../translation/extra.c:7 msgid "Release device while stopped" -msgstr "" +msgstr "Geef apparaat vrij wanneer gestopt" #: ../translation/extra.c:8 ../translation/extra.c:43 msgid "Preferred buffer size" -msgstr "" +msgstr "Voorkeursomvang van de buffer" #: ../translation/extra.c:9 msgid "Preferred period size" -msgstr "" +msgstr "Voorkeursomvang van de periode" #. Last.fm plugin #: ../translation/extra.c:11 -#, fuzzy msgid "Enable scrobbler" -msgstr "Schakel Proxy Server in" +msgstr "Schakel scrobbler in" #: ../translation/extra.c:12 -#, fuzzy msgid "Disable nowplaying" -msgstr "DeaDBeeF speelt nu af" +msgstr "Schakel NuAanHetAfspelen uit" #: ../translation/extra.c:13 -#, fuzzy msgid "Username" -msgstr "Proxy Gebruikersnaam:" +msgstr "Gebruikersnaam" #: ../translation/extra.c:14 -#, fuzzy msgid "Password" -msgstr "Proxy wachtwoord:" +msgstr "Wachtwoord" #: ../translation/extra.c:15 msgid "Scrobble URL" -msgstr "" +msgstr "Scrobble URL" #. Album Artwork plugin #: ../translation/extra.c:17 msgid "Cache update period (hr)" -msgstr "" +msgstr "Periode voor bijwerken opslag (uur)" #: ../translation/extra.c:18 msgid "Fetch from embedded tags" -msgstr "" +msgstr "Haal op uit ingebedde etiketten" #: ../translation/extra.c:19 msgid "Fetch from local folder" -msgstr "" +msgstr "Haal op uit plaatselijke map" #: ../translation/extra.c:20 msgid "Local cover file mask" -msgstr "" +msgstr "Plaatselijk masker voor hoesbestand" #: ../translation/extra.c:21 msgid "Fetch from last.fm" -msgstr "" +msgstr "Haal op van Last.fm" #: ../translation/extra.c:22 msgid "Fetch from albumart.org" -msgstr "" +msgstr "Haal op van albumart.org" #. Audio CD player #: ../translation/extra.c:24 msgid "Use CDDB/FreeDB" -msgstr "" +msgstr "Gebruik CDDB/FreeDB" #: ../translation/extra.c:25 msgid "Prefer CD-Text over CDDB" -msgstr "" +msgstr "Verkies CD-tekst boven CDDB" #: ../translation/extra.c:26 msgid "CDDB url (e.g. 'freedb.org')" -msgstr "" +msgstr "CDDB url (bijv. 'freedb.org')" #: ../translation/extra.c:27 msgid "CDDB port number (e.g. '888')" -msgstr "" +msgstr "CDDB poortnummer (bijv. '888')" #: ../translation/extra.c:28 msgid "Prefer CDDB protocol over HTTP" -msgstr "" +msgstr "Verkies CDDB-protocol boven HTTP" #: ../translation/extra.c:29 msgid "Enable NRG image support" -msgstr "" +msgstr "Schakel NRG-afbeeldingsondersteuning in" #. DUMB module player plugin #: ../translation/extra.c:31 msgid "Resampling quality (0..2, higher is better)" -msgstr "" +msgstr "Resampling-kwaliteit (0..2, hoger is beter)" #. Game_Music_Emu decoder plugin #: ../translation/extra.c:33 msgid "Max song length (in minutes)" -msgstr "" +msgstr "Maximale muziekstukduur (in minuten)" #. Standard GTK2 user interface plugin #: ../translation/extra.c:35 -#, fuzzy msgid "Ask confirmation to delete files from disk" -msgstr "Verwijder bestanden van schijf" +msgstr "Vraag bevestiging voor het verwijderen van bestanden van de schijf" #: ../translation/extra.c:36 msgid "Status icon volume control sensitivity" -msgstr "" +msgstr "Statuspictogram voor gevoeligheid van volumeknop" #: ../translation/extra.c:37 msgid "Custom status icon" -msgstr "" +msgstr "Aangepast statuspictogram" #: ../translation/extra.c:38 msgid "Run gtk_init with --sync (debug mode)" -msgstr "" +msgstr "Draai gtk_init met --sync (debug-modus)" #. OSD Notify plugin #: ../translation/extra.c:40 msgid "Notification format" -msgstr "" +msgstr "Bestandopmaak van melding" #. PulseAudio output plugin #: ../translation/extra.c:42 msgid "PulseAudio server" -msgstr "" +msgstr "PulseAudio-server" #: ../translation/extra.c:44 msgid "Samplerate" -msgstr "" +msgstr "Samplerate" #. SHN player plugin #: ../translation/extra.c:46 msgid "Relative seek table path" -msgstr "" +msgstr "Relatief pad voor zoektabel" #: ../translation/extra.c:47 msgid "Absolute seek table path" -msgstr "" +msgstr "Absoluut pad voor zoektabel" #: ../translation/extra.c:48 msgid "Swap audio bytes (toggle if all you hear is static)" msgstr "" +"Verwissel audio-bytes (schakel om indien u slechts statische ruis hoort)" #. SID decoder plugin #: ../translation/extra.c:50 -#, fuzzy msgid "Enable HVSC" -msgstr "Inschakelen" +msgstr "HVSC inschakelen" #: ../translation/extra.c:51 msgid "HVSC path" -msgstr "" +msgstr "HVSC-pad" #. WildMidi player plugin #: ../translation/extra.c:53 msgid "Timidity++ bank configuration file" -msgstr "" +msgstr "Configuratiebestand voor Timidity++ bank" #: ../translation/extra.c:56 -#, fuzzy msgid "Track Title" -msgstr "Title nr." +msgstr "Spoor Titel" #: ../translation/extra.c:57 msgid "Performer" -msgstr "" +msgstr "Artiest" #: ../translation/extra.c:60 msgid "Date" -msgstr "" +msgstr "Datum" #: ../translation/extra.c:61 -#, fuzzy msgid "Track Number" -msgstr "Title nr." +msgstr "Spoor Nummer" #: ../translation/extra.c:62 -#, fuzzy msgid "Total Tracks" -msgstr "Titel / Titel Artiest" +msgstr "Totaal aantal Sporen" #: ../translation/extra.c:63 msgid "Genre" -msgstr "" +msgstr "Genre" #: ../translation/extra.c:64 msgid "Composer" -msgstr "" +msgstr "Componist" #: ../translation/extra.c:65 -#, fuzzy msgid "Disc Number" -msgstr "Bestand´s nummer" +msgstr "Schijf Nummer" #: ../translation/extra.c:66 msgid "Comment" -msgstr "" +msgstr "Commentaar" #: ../translation/extra.c:67 msgid "Encoder / Vendor" -msgstr "" +msgstr "Encodeur/Verkoper" #: ../translation/extra.c:68 msgid "Copyright" -msgstr "" +msgstr "Auteursrecht" #~ msgid "" #~ "<b>WARNING</b>: tag writing feature is still in development.\n" @@ -8,16 +8,17 @@ msgstr "" "Project-Id-Version: deadbeef\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-10-06 04:37+0000\n" -"PO-Revision-Date: 2010-10-06 12:05-0000\n" +"PO-Revision-Date: 2011-06-10 19:27-0000\n" "Last-Translator: Sérgio Marques <smarquespt@gmail.com>\n" "Language-Team: \n" +"Language: pt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.5\n" "X-Poedit-Language: Portuguese\n" "X-Poedit-Country: Portugal\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../plugins/gtkui/callbacks.c:97 msgid "Supported sound formats" @@ -41,7 +42,7 @@ msgstr "Adicionar pasta(s) à lista..." #: ../plugins/gtkui/callbacks.c:192 msgid "Follow symlinks" -msgstr "Seguir \"symlinks\"" +msgstr "Seguir ligações simbólicas" #: ../plugins/gtkui/callbacks.c:667 msgid "Failed while reading help file" @@ -64,7 +65,7 @@ msgstr "Ajuda" #: ../plugins/gtkui/callbacks.c:703 #, c-format msgid "About DeaDBeeF %s" -msgstr "Sobre DeaDBeef %s" +msgstr "Sobre o DeaDBeef %s" #: ../plugins/gtkui/callbacks.c:705 msgid "about.txt" @@ -114,27 +115,27 @@ msgstr "Adicionar nova lista" #: ../plugins/gtkui/eq.c:113 msgid "Save DeaDBeeF EQ Preset" -msgstr "Gravar pré-Ajustes do EQ DeadBeeF" +msgstr "Gravar pré-ajustes do EQ DeadBeeF" #: ../plugins/gtkui/eq.c:120 msgid "DeaDBeeF EQ preset files (*.ddbeq)" -msgstr "Ficheiros de pré-Ajustes do EQ DeadBeeF(*.ddbeq)" +msgstr "Ficheiros de pré-ajustes do EQ DeadBeeF(*.ddbeq)" #: ../plugins/gtkui/eq.c:151 msgid "Load DeaDBeeF EQ Preset..." -msgstr "Carregar pré-Ajustes do EQ DeadBeeF..." +msgstr "Carregar pré-ajustes do EQ DeadBeeF..." #: ../plugins/gtkui/eq.c:155 msgid "DeaDBeeF EQ presets (*.ddbeq)" -msgstr "Pré-Ajustes do EQ DeadBeeF (*.ddbeq)" +msgstr "Pré-ajustes do EQ DeadBeeF (*.ddbeq)" #: ../plugins/gtkui/eq.c:214 msgid "Import Foobar2000 EQ Preset..." -msgstr "Importar pré-Ajustes Foobar2000..." +msgstr "Importar pré-ajustes Foobar2000..." #: ../plugins/gtkui/eq.c:218 msgid "Foobar2000 EQ presets (*.feq)" -msgstr "Pré-Ajustes Foobar2000 (*.feq)" +msgstr "Pré-ajustes Foobar2000 (*.feq)" #: ../plugins/gtkui/eq.c:292 msgid "Enable" @@ -142,27 +143,27 @@ msgstr "Ativar" #: ../plugins/gtkui/eq.c:300 msgid "Zero All" -msgstr "Tudo a zero" +msgstr "Nulo" #: ../plugins/gtkui/eq.c:307 msgid "Zero Preamp" -msgstr "\"Zero Preamp\"" +msgstr "Amplificador nulo" #: ../plugins/gtkui/eq.c:314 msgid "Zero Bands" -msgstr "Bandas a zero" +msgstr "Bandas nulas" #: ../plugins/gtkui/eq.c:321 msgid "Save Preset" -msgstr "Gravar pré-Ajustes" +msgstr "Gravar pré-ajustes" #: ../plugins/gtkui/eq.c:328 msgid "Load Preset" -msgstr "Carregar pré-Ajustes" +msgstr "Carregar pré-ajustes" #: ../plugins/gtkui/eq.c:335 msgid "Import Foobar2000 Preset" -msgstr "Importar pré-Ajustes do Foobar2000" +msgstr "Importar pré-ajustes do Foobar2000" #: ../plugins/gtkui/gtkui.c:133 #, c-format @@ -177,7 +178,7 @@ msgstr "%d dias %d:%02d:%02d" #: ../plugins/gtkui/gtkui.c:145 #, c-format msgid "Stopped | %d tracks | %s total playtime" -msgstr "Parado | %d faixas | %s reproduções" +msgstr "Parado | %d músicas | %s reproduções" #: ../plugins/gtkui/gtkui.c:158 msgid "Mono" @@ -194,12 +195,12 @@ msgstr "| %4d kbps " #: ../plugins/gtkui/gtkui.c:189 msgid "Paused | " -msgstr "Pausado | " +msgstr "Em pausa | " #: ../plugins/gtkui/gtkui.c:190 #, c-format msgid "%s%s %s| %dHz | %d bit | %s | %d:%02d / %s | %d tracks | %s total playtime" -msgstr "%s%s %s| %dHz | %d bit | %s | %d:%02d / %s | %d faixas | %s reproduções" +msgstr "%s%s %s| %dHz | %d bit | %s | %d:%02d / %s | %d músicas | %s reproduções" #: ../plugins/gtkui/gtkui.c:661 msgid "Save Playlist As" @@ -360,7 +361,7 @@ msgstr "_Reprodução" #: ../plugins/gtkui/interface.c:323 #: ../plugins/gtkui/deadbeef.glade.h:85 msgid "Order" -msgstr "Ordem" +msgstr "Organização" #: ../plugins/gtkui/interface.c:330 #: ../plugins/gtkui/deadbeef.glade.h:73 @@ -471,7 +472,7 @@ msgstr "Pausar" #: ../plugins/gtkui/interface.c:935 #: ../plugins/gtkui/deadbeef.glade.h:97 msgid "Previous" -msgstr "Anterior " +msgstr "Anterior" #: ../plugins/gtkui/interface.c:943 #: ../plugins/gtkui/deadbeef.glade.h:83 @@ -506,7 +507,7 @@ msgstr "_Abortar" #: ../plugins/gtkui/interface.c:1189 #: ../plugins/gtkui/deadbeef.glade.h:135 msgid "Track Properties" -msgstr "Propriedades da faixa" +msgstr "Propriedades da música" #: ../plugins/gtkui/interface.c:1235 #: ../plugins/gtkui/deadbeef.glade.h:146 @@ -600,7 +601,7 @@ msgstr "Faixa" #: ../plugins/gtkui/interface.c:1439 #: ../translation/extra.c:58 msgid "Band / Album Artist" -msgstr "Banda/Artista do Álbum" +msgstr "Banda / Artista do álbum" #: ../plugins/gtkui/interface.c:1440 #: ../plugins/gtkui/plcommon.c:882 @@ -639,11 +640,11 @@ msgid "" "Example: %a - %t [%l]" msgstr "" "Conversão de formatos (iniciam com %):\n" -" [a]rtista, [t]ítulo, ál[b]um, [B]anda, [C]ompositor\n" -" [n]úmerodefaixa, [N]totaldefaixas,\n" -" [l]duração, [y]ano, [g]énero, [c]omentário,\n" -" di[r]eitosdeautor, nomede[f]icheiro, [F]nomecompletodocaminho,\n" -" [T]detalhes [d]iretório, [D]iretóriocomcaminho\n" +"[a]rtista, [t]ítulo, ál[b]um, [B]anda, [C]ompositor\n" +"[n]úmerodefaixa, [N]totaldefaixas,\n" +"[l]duração, [y]ano, [g]énero, [c]omentário,\n" +"di[r]eitosdeautor, nomede[f]icheiro, [F]nomecompletodocaminho,\n" +"[T]detalhes [d]iretório, [D]iretóriocomcaminho\n" "Exemplo: %a - %t [%l]" #: ../plugins/gtkui/interface.c:1501 @@ -665,7 +666,7 @@ msgstr "_OK" #: ../plugins/gtkui/interface.c:1753 #: ../plugins/gtkui/deadbeef.glade.h:87 msgid "Output plugin:" -msgstr "\"Plug-ins\" de som:" +msgstr "\"Plug-in\" de som:" #: ../plugins/gtkui/interface.c:1766 #: ../plugins/gtkui/deadbeef.glade.h:86 @@ -680,7 +681,7 @@ msgstr "Som" #: ../plugins/gtkui/interface.c:1784 #: ../plugins/gtkui/deadbeef.glade.h:10 msgid "Allow dynamic samplerate switching" -msgstr "Permitir troca dinâmica da taxa de amostragem" +msgstr "Permitir troca dinâmica da frequência" #: ../plugins/gtkui/interface.c:1792 #: ../plugins/gtkui/deadbeef.glade.h:110 @@ -734,12 +735,12 @@ msgstr "Ocultar ícone da área de notificação" #: ../plugins/gtkui/interface.c:1866 #: ../plugins/gtkui/deadbeef.glade.h:138 msgid "Use bold font for currently playing track" -msgstr "Utilizar letra a negrito para a faixa em reprodução" +msgstr "Utilizar letra a negrito para a faixa reproduzida" #: ../plugins/gtkui/interface.c:1870 #: ../plugins/gtkui/deadbeef.glade.h:53 msgid "Hide \"Delete from disk\" context menu item" -msgstr "Ocultar item do menu de contexto \"Apagar do disco\"" +msgstr "Ocultar item do menu \"Apagar do disco\"" #: ../plugins/gtkui/interface.c:1878 #: ../plugins/gtkui/deadbeef.glade.h:133 @@ -955,12 +956,12 @@ msgstr "Descrição:" #: ../plugins/gtkui/interface.c:2434 #: ../plugins/gtkui/deadbeef.glade.h:11 msgid "Author(s):" -msgstr "Autor(s):" +msgstr "Autor(es):" #: ../plugins/gtkui/interface.c:2449 #: ../plugins/gtkui/deadbeef.glade.h:28 msgid "Email:" -msgstr "\"Email\":" +msgstr "Endereço eletrónico:" #: ../plugins/gtkui/interface.c:2464 #: ../plugins/gtkui/deadbeef.glade.h:139 @@ -1023,7 +1024,7 @@ msgstr "Faixa n.º" #: ../plugins/gtkui/mainplaylist.c:308 #: ../plugins/gtkui/search.c:441 msgid "Title / Track Artist" -msgstr "Título/Artista da faixa" +msgstr "Título / Artista da faixa" #: ../plugins/gtkui/mainplaylist.c:309 #: ../plugins/gtkui/search.c:442 @@ -1040,8 +1041,8 @@ msgid "" "Files will be lost. Proceed?\n" "(This dialog can be turned off in GTKUI plugin settings)" msgstr "" -"Os ficheiros serão perdidos. Continuar?\n" -"(Esta janela pode ser desligada nas definições do \"GTKUI\")" +"Os ficheiros serão eliminados. Continuar?\n" +"(Esta janela pode ser desligada nas definições da GTKUI)" #: ../plugins/gtkui/plcommon.c:326 #: ../plugins/gtkui/trkproperties.c:56 @@ -1050,11 +1051,11 @@ msgstr "Aviso" #: ../plugins/gtkui/plcommon.c:402 msgid "Add to playback queue" -msgstr "Colocar na fila da lista" +msgstr "Colocar na fila de reprodução" #: ../plugins/gtkui/plcommon.c:407 msgid "Remove from playback queue" -msgstr "Remover da fila da lista" +msgstr "Remover da fila de reprodução" #: ../plugins/gtkui/plcommon.c:415 msgid "Reload metadata" @@ -1084,7 +1085,7 @@ msgstr "Agrupar por" #: ../plugins/gtkui/plcommon.c:870 msgid "None" -msgstr "Nenhum" +msgstr "Nada" #: ../plugins/gtkui/plcommon.c:874 msgid "Artist/Date/Album" @@ -1113,7 +1114,7 @@ msgstr "Teclas de atalho" #: ../plugins/gtkui/prefwin.c:401 msgid "Slot" -msgstr "Ranhura" +msgstr "Slot" #: ../plugins/gtkui/prefwin.c:402 msgid "Key combination" @@ -1152,7 +1153,7 @@ msgstr "Tipo(s) de detalhes" #: ../plugins/gtkui/trkproperties.c:180 msgid "Embedded Cuesheet" -msgstr "\"Cuesheet\" incorporada" +msgstr "Cuesheet incorporada" #: ../plugins/gtkui/trkproperties.c:180 msgid "Yes" @@ -1198,7 +1199,7 @@ msgstr " --help ou -h Imprime a ajuda e sai\n" #: ../main.c:92 #, c-format msgid " --quit Quit player\n" -msgstr " --quit Sair do DeadBeeF\n" +msgstr " --quit Sai do DeadBeeF\n" #: ../main.c:93 #, c-format @@ -1208,17 +1209,17 @@ msgstr " --version Imprime info da versão e sai\n" #: ../main.c:94 #, c-format msgid " --play Start playback\n" -msgstr " --play Iniciar reprodução\n" +msgstr " --play Inicia a reprodução\n" #: ../main.c:95 #, c-format msgid " --stop Stop playback\n" -msgstr " --stop Parar reprodução\n" +msgstr " --stop Para a reprodução\n" #: ../main.c:96 #, c-format msgid " --pause Pause playback\n" -msgstr " --pause Pausar reprodução\n" +msgstr " --pause Pausa a reprodução\n" #: ../main.c:97 #, c-format @@ -1228,7 +1229,7 @@ msgstr " --next Avança uma música\n" #: ../main.c:98 #, c-format msgid " --prev Previous song in playlist\n" -msgstr " --prev Retrocede uma música\n" +msgstr " --prev Recua uma música\n" #: ../main.c:99 #, c-format @@ -1238,12 +1239,12 @@ msgstr " --random Música aleatória na lista\n" #: ../main.c:100 #, c-format msgid " --queue Append file(s) to existing playlist\n" -msgstr " --queue Acrescenta ficheiro(s) à lista existente\n" +msgstr " --queue Junta ficheiro(s) à lista existente\n" #: ../main.c:101 #, c-format msgid " --nowplaying FMT Print formatted track name to stdout\n" -msgstr " --nowplaying FMT Imprime o nome da faixa para \"stdout\"\n" +msgstr " --nowplaying FMT Grava o nome da faixa para stdout\n" #: ../main.c:102 #, c-format @@ -1259,7 +1260,7 @@ msgstr "" #: ../main.c:105 #, c-format msgid " e.g.: --nowplaying \"%%a - %%t\" should print \"artist - title\"\n" -msgstr " ex: --nowplaying \"%%a - %%t\" deve imprimir \"artista - título\"\n" +msgstr " ex: --nowplaying \"%%a - %%t\" deve gravar \"artista - título\"\n" #: ../playlist.c:377 #: ../playlist.c:2289 @@ -1307,7 +1308,7 @@ msgstr "" "Título\n" "Duração\n" "Faixa\n" -"Banda/artista do álbum\n" +"Banda / artista do álbum\n" "Personalizar" #: ../plugins/gtkui/deadbeef.glade.h:70 @@ -1327,7 +1328,7 @@ msgstr "Incapaz de encontrar o ficheiro: %s" #: ../plugins/wildmidi/wildmidiplug.c:162 #, c-format msgid "wildmidi: freepats config file not found. Please install timidity-freepats package, or specify path to freepats.cfg in the plugin settings." -msgstr "wildmidi: o ficheiro de configuração \"freepats\" não foi encontrado. Por favor, instale o pacote timidity-freepats ou especifique o caminho para freepats.cfg nas definições do \"plug-in\"." +msgstr "wildmidi: o ficheiro de configuração freepats não foi encontrado. Por favor, instale o pacote timidity-freepats ou especifique o caminho para freepats.cfg nas definições do \"plug-in\"." #. this file should list extra translatable strings that are not referenced #. directly in source code, e.g. scripted plugin configuration strings @@ -1351,11 +1352,11 @@ msgstr "Libertar dispositivo se parado" #: ../translation/extra.c:8 #: ../translation/extra.c:43 msgid "Preferred buffer size" -msgstr "Tamanho do \"buffer\"" +msgstr "Tamanho do buffer" #: ../translation/extra.c:9 msgid "Preferred period size" -msgstr "Tamnaho do período" +msgstr "Tamanho do período" #. Last.fm plugin #: ../translation/extra.c:11 @@ -1376,7 +1377,7 @@ msgstr "Senha" #: ../translation/extra.c:15 msgid "Scrobble URL" -msgstr "Memorizar URL" +msgstr "Scrobble URL" #. Album Artwork plugin #: ../translation/extra.c:17 @@ -1389,7 +1390,7 @@ msgstr "Obter a partir dos detalhes" #: ../translation/extra.c:19 msgid "Fetch from local folder" -msgstr "Obter numa pasta local" +msgstr "Obter numa pasta local" #: ../translation/extra.c:20 msgid "Local cover file mask" @@ -1414,11 +1415,11 @@ msgstr "Preferir CD-Text a CDDB" #: ../translation/extra.c:26 msgid "CDDB url (e.g. 'freedb.org')" -msgstr "URL CDDB (ex: \"freedb.org\")" +msgstr "URL CDDB (ex: freedb.org)" #: ../translation/extra.c:27 msgid "CDDB port number (e.g. '888')" -msgstr "Porta CDDB (ex: \"888\")" +msgstr "Porta CDDB (ex: 888)" #: ../translation/extra.c:28 msgid "Prefer CDDB protocol over HTTP" @@ -1453,7 +1454,7 @@ msgstr "Ícone de estado personalizado" #: ../translation/extra.c:38 msgid "Run gtk_init with --sync (debug mode)" -msgstr "Execute gtk_init com --sync (modo \"debug\")" +msgstr "Execute gtk_init com --sync (modo de depuração)" #. OSD Notify plugin #: ../translation/extra.c:40 @@ -1467,7 +1468,7 @@ msgstr "Servidor PulseAudio" #: ../translation/extra.c:44 msgid "Samplerate" -msgstr "Taxa de amostra" +msgstr "Frequência" #. SHN player plugin #: ../translation/extra.c:46 @@ -1480,7 +1481,7 @@ msgstr "Caminho da tabela de pesquisa absoluta" #: ../translation/extra.c:48 msgid "Swap audio bytes (toggle if all you hear is static)" -msgstr "Trocar \"bytes\" áudio (troque se apenas ouvir estático)" +msgstr "Trocar bytes áudio (apenas se ouvir defeitos)" #. SID decoder plugin #: ../translation/extra.c:50 @@ -1498,7 +1499,7 @@ msgstr "Ficheiro de configuração do Timidity++" #: ../translation/extra.c:56 msgid "Track Title" -msgstr "Título da faixa" +msgstr "Título da música" #: ../translation/extra.c:57 msgid "Performer" @@ -1510,11 +1511,11 @@ msgstr "Data" #: ../translation/extra.c:61 msgid "Track Number" -msgstr "Número da faixa" +msgstr "Número da música" #: ../translation/extra.c:62 msgid "Total Tracks" -msgstr "Total de faixas" +msgstr "Total de músicas" #: ../translation/extra.c:63 msgid "Genre" @@ -1534,7 +1535,7 @@ msgstr "Comentário" #: ../translation/extra.c:67 msgid "Encoder / Vendor" -msgstr "Codificador/Fornecedor" +msgstr "Codificador / Fornecedor" #: ../translation/extra.c:68 msgid "Copyright" diff --git a/po/pt_BR.po b/po/pt_BR.po index fe1b5399..c727cd5f 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: deadbeef\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-05-08 15:08-0300\n" -"PO-Revision-Date: 2011-05-08 21:32-0300\n" +"POT-Creation-Date: 2011-05-23 12:53-0300\n" +"PO-Revision-Date: 2011-05-23 19:55-0300\n" "Last-Translator: Sérgio Cipolla <secipolla@gmail.com>\n" "Language-Team: Brazilian Portuguese <ldp-br@bazar2.conectiva.com.br>\n" "Language: pt_BR\n" @@ -24,7 +24,7 @@ msgid "Supported sound formats" msgstr "Formatos de áudio suportados" #: ../plugins/gtkui/callbacks.c:132 -#: ../plugins/gtkui/gtkui.c:772 +#: ../plugins/gtkui/gtkui.c:776 msgid "Other files (*)" msgstr "Outros arquivos (*)" @@ -58,7 +58,9 @@ msgstr "help.pt_BR.txt" #: ../plugins/gtkui/callbacks.c:723 #: ../plugins/gtkui/interface.c:1155 -#: ../plugins/gtkui/deadbeef.glade.h:47 +#: ../plugins/gtkui/deadbeef.glade.h:48 +#: ../plugins/converter/convgui.c:1240 +#: ../plugins/converter/convgui.c:1248 msgid "Help" msgstr "Ajuda" @@ -77,29 +79,28 @@ msgstr "Registro de alterações - DeaDBeeF %s" msgid "DeaDBeeF Translators" msgstr "Tradutores do DeaDBeeF" -#: ../plugins/gtkui/ddbtabstrip.c:684 -#: ../plugins/gtkui/trkproperties.c:599 +#: ../plugins/gtkui/ddbtabstrip.c:689 +#: ../plugins/gtkui/trkproperties.c:618 msgid "Edit playlist" msgstr "Editar lista de reprodução" -#: ../plugins/gtkui/ddbtabstrip.c:687 +#: ../plugins/gtkui/ddbtabstrip.c:692 #: ../plugins/gtkui/interface.c:1486 -#: ../plugins/gtkui/interface.c:2861 -#: ../plugins/gtkui/deadbeef.glade.h:134 +#: ../plugins/gtkui/interface.c:2870 +#: ../plugins/gtkui/deadbeef.glade.h:135 #: ../plugins/converter/interface.c:402 -#: ../plugins/converter/converter.glade.h:46 msgid "Title:" msgstr "Título:" -#: ../plugins/gtkui/ddbtabstrip.c:742 +#: ../plugins/gtkui/ddbtabstrip.c:748 msgid "Rename Playlist" msgstr "Renomear lista de reprodução" -#: ../plugins/gtkui/ddbtabstrip.c:746 +#: ../plugins/gtkui/ddbtabstrip.c:752 msgid "Remove Playlist" msgstr "Remover lista de reprodução" -#: ../plugins/gtkui/ddbtabstrip.c:750 +#: ../plugins/gtkui/ddbtabstrip.c:756 msgid "Add New Playlist" msgstr "Adicionar nova lista de reprodução" @@ -157,7 +158,6 @@ msgstr "Bandas a zero" #: ../plugins/gtkui/eq.c:387 #: ../plugins/converter/interface.c:826 -#: ../plugins/converter/converter.glade.h:40 msgid "Presets" msgstr "Predefinições" @@ -198,35 +198,35 @@ msgstr "Pausado | " msgid "%s%s %s| %dHz | %d bit | %s | %d:%02d / %s | %d tracks | %s total playtime" msgstr "%s%s %s| %dHz | %d bit | %s | %d:%02d / %s | %d faixas | %s tempo total de reprodução" -#: ../plugins/gtkui/gtkui.c:628 +#: ../plugins/gtkui/gtkui.c:632 msgid "Save Playlist As" msgstr "Salvar lista como" -#: ../plugins/gtkui/gtkui.c:639 +#: ../plugins/gtkui/gtkui.c:643 msgid "DeaDBeeF playlist files (*.dbpl)" msgstr "Arquivos de listas do DeaDBeeF (*.dbpl)" -#: ../plugins/gtkui/gtkui.c:757 +#: ../plugins/gtkui/gtkui.c:761 msgid "Load Playlist" msgstr "Carregar lista" -#: ../plugins/gtkui/gtkui.c:906 -#: ../plugins/gtkui/fileman.c:36 +#: ../plugins/gtkui/gtkui.c:914 +#: ../plugins/gtkui/fileman.c:40 msgid "New Playlist" msgstr "Nova lista" -#: ../plugins/gtkui/gtkui.c:909 +#: ../plugins/gtkui/gtkui.c:917 #, c-format msgid "New Playlist (%d)" msgstr "Nova lista (%d)" #: ../plugins/gtkui/interface.c:150 -#: ../plugins/gtkui/deadbeef.glade.h:154 +#: ../plugins/gtkui/deadbeef.glade.h:155 msgid "_File" msgstr "_Arquivo" #: ../plugins/gtkui/interface.c:157 -#: ../plugins/gtkui/deadbeef.glade.h:161 +#: ../plugins/gtkui/deadbeef.glade.h:162 msgid "_Open file(s)" msgstr "_Abrir arquivos(s)" @@ -241,298 +241,296 @@ msgid "Add folder(s)" msgstr "Adicionar pasta(s)" #: ../plugins/gtkui/interface.c:189 -#: ../plugins/gtkui/interface.c:2961 +#: ../plugins/gtkui/interface.c:2970 #: ../plugins/gtkui/deadbeef.glade.h:9 msgid "Add location" msgstr "Adicionar local" #: ../plugins/gtkui/interface.c:198 -#: ../plugins/gtkui/deadbeef.glade.h:78 +#: ../plugins/gtkui/deadbeef.glade.h:79 msgid "New playlist" msgstr "Nova lista de reprodução" #: ../plugins/gtkui/interface.c:205 -#: ../plugins/gtkui/deadbeef.glade.h:70 +#: ../plugins/gtkui/deadbeef.glade.h:71 msgid "Load playlist" msgstr "Carregar lista de reprodução" #: ../plugins/gtkui/interface.c:209 -#: ../plugins/gtkui/deadbeef.glade.h:108 +#: ../plugins/gtkui/deadbeef.glade.h:109 msgid "Save playlist" msgstr "Salvar lista de reprodução" #: ../plugins/gtkui/interface.c:218 -#: ../plugins/gtkui/deadbeef.glade.h:163 +#: ../plugins/gtkui/deadbeef.glade.h:164 msgid "_Quit" msgstr "_Sair" #: ../plugins/gtkui/interface.c:229 -#: ../plugins/gtkui/deadbeef.glade.h:153 +#: ../plugins/gtkui/deadbeef.glade.h:154 msgid "_Edit" msgstr "_Editar" #: ../plugins/gtkui/interface.c:236 -#: ../plugins/gtkui/deadbeef.glade.h:151 +#: ../plugins/gtkui/deadbeef.glade.h:152 msgid "_Clear" msgstr "_Limpar" #: ../plugins/gtkui/interface.c:244 -#: ../plugins/gtkui/deadbeef.glade.h:113 +#: ../plugins/gtkui/deadbeef.glade.h:114 msgid "Select all" msgstr "Selecionar tudo" #: ../plugins/gtkui/interface.c:251 -#: ../plugins/gtkui/deadbeef.glade.h:31 +#: ../plugins/gtkui/deadbeef.glade.h:32 msgid "Deselect all" msgstr "Desmarcar tudo" #: ../plugins/gtkui/interface.c:258 -#: ../plugins/gtkui/deadbeef.glade.h:53 +#: ../plugins/gtkui/deadbeef.glade.h:54 msgid "Invert selection" msgstr "Inverter seleção" #: ../plugins/gtkui/interface.c:262 -#: ../plugins/gtkui/deadbeef.glade.h:116 +#: ../plugins/gtkui/deadbeef.glade.h:117 msgid "Selection" msgstr "Seleção" #: ../plugins/gtkui/interface.c:269 -#: ../plugins/gtkui/plcommon.c:447 +#: ../plugins/gtkui/plcommon.c:453 #: ../plugins/gtkui/prefwin.c:323 -#: ../plugins/gtkui/deadbeef.glade.h:103 +#: ../plugins/gtkui/deadbeef.glade.h:104 #: ../plugins/converter/interface.c:653 -#: ../plugins/converter/converter.glade.h:43 msgid "Remove" msgstr "Remover" #: ../plugins/gtkui/interface.c:277 -#: ../plugins/gtkui/deadbeef.glade.h:23 +#: ../plugins/gtkui/deadbeef.glade.h:24 msgid "Crop" msgstr "Cortar" #: ../plugins/gtkui/interface.c:281 -#: ../plugins/gtkui/deadbeef.glade.h:155 +#: ../plugins/gtkui/deadbeef.glade.h:156 msgid "_Find" msgstr "_Procurar" #: ../plugins/gtkui/interface.c:288 -#: ../plugins/gtkui/deadbeef.glade.h:120 +#: ../plugins/gtkui/deadbeef.glade.h:121 msgid "Sort By" msgstr "Ordenar por" #: ../plugins/gtkui/interface.c:295 #: ../plugins/gtkui/interface.c:1516 -#: ../plugins/gtkui/mainplaylist.c:308 -#: ../plugins/gtkui/prefwin.c:620 -#: ../plugins/gtkui/search.c:385 -#: ../plugins/gtkui/deadbeef.glade.h:133 -#: ../plugins/converter/convgui.c:782 -#: ../plugins/converter/convgui.c:1203 +#: ../plugins/gtkui/mainplaylist.c:315 +#: ../plugins/gtkui/prefwin.c:623 +#: ../plugins/gtkui/search.c:393 +#: ../plugins/gtkui/deadbeef.glade.h:134 +#: ../plugins/converter/convgui.c:790 +#: ../plugins/converter/convgui.c:1211 #: ../plugins/converter/interface.c:630 -#: ../plugins/converter/converter.glade.h:45 msgid "Title" msgstr "Título" #: ../plugins/gtkui/interface.c:299 -#: ../plugins/gtkui/deadbeef.glade.h:138 +#: ../plugins/gtkui/deadbeef.glade.h:139 msgid "Track number" msgstr "Número da faixa" #: ../plugins/gtkui/interface.c:303 #: ../plugins/gtkui/interface.c:1515 -#: ../plugins/gtkui/interface.c:1864 +#: ../plugins/gtkui/interface.c:1869 #: ../plugins/gtkui/deadbeef.glade.h:10 -#: ../translation/extra.c:68 +#: ../translation/extra.c:69 msgid "Album" msgstr "Álbum" #. Track properties dialog #: ../plugins/gtkui/interface.c:307 #: ../plugins/gtkui/interface.c:1514 -#: ../plugins/gtkui/plcommon.c:992 -#: ../plugins/gtkui/deadbeef.glade.h:12 -#: ../translation/extra.c:64 +#: ../plugins/gtkui/plcommon.c:998 +#: ../plugins/gtkui/deadbeef.glade.h:13 +#: ../translation/extra.c:65 msgid "Artist" msgstr "Artista" #: ../plugins/gtkui/interface.c:311 -#: ../plugins/gtkui/deadbeef.glade.h:30 -#: ../translation/extra.c:69 +#: ../plugins/gtkui/deadbeef.glade.h:31 +#: ../translation/extra.c:70 msgid "Date" msgstr "Data" #: ../plugins/gtkui/interface.c:315 #: ../plugins/gtkui/interface.c:1520 -#: ../plugins/gtkui/plcommon.c:996 -#: ../plugins/gtkui/deadbeef.glade.h:26 +#: ../plugins/gtkui/plcommon.c:1002 +#: ../plugins/gtkui/deadbeef.glade.h:27 msgid "Custom" msgstr "Personalizar" #: ../plugins/gtkui/interface.c:324 -#: ../plugins/gtkui/interface.c:1797 -#: ../plugins/gtkui/deadbeef.glade.h:93 +#: ../plugins/gtkui/interface.c:1798 +#: ../plugins/gtkui/deadbeef.glade.h:94 msgid "Preferences" msgstr "Preferências" #: ../plugins/gtkui/interface.c:328 -#: ../plugins/gtkui/deadbeef.glade.h:165 +#: ../plugins/gtkui/deadbeef.glade.h:166 msgid "_View" msgstr "_Ver" #: ../plugins/gtkui/interface.c:335 -#: ../plugins/gtkui/deadbeef.glade.h:123 +#: ../plugins/gtkui/deadbeef.glade.h:124 msgid "Status bar" msgstr "Barra de status" #: ../plugins/gtkui/interface.c:339 -#: ../plugins/gtkui/deadbeef.glade.h:20 +#: ../plugins/gtkui/deadbeef.glade.h:21 msgid "Column headers" msgstr "Cabeçalhos das colunas" #: ../plugins/gtkui/interface.c:343 -#: ../plugins/gtkui/deadbeef.glade.h:130 +#: ../plugins/gtkui/deadbeef.glade.h:131 msgid "Tabs" msgstr "Abas" #: ../plugins/gtkui/interface.c:347 -#: ../plugins/gtkui/deadbeef.glade.h:39 +#: ../plugins/gtkui/deadbeef.glade.h:40 msgid "Equalizer" msgstr "Equalizador" #: ../plugins/gtkui/interface.c:351 -#: ../plugins/gtkui/deadbeef.glade.h:162 +#: ../plugins/gtkui/deadbeef.glade.h:163 msgid "_Playback" msgstr "_Reprodução" #: ../plugins/gtkui/interface.c:358 -#: ../plugins/gtkui/interface.c:3237 -#: ../plugins/gtkui/deadbeef.glade.h:81 +#: ../plugins/gtkui/interface.c:3246 +#: ../plugins/gtkui/deadbeef.glade.h:82 msgid "Order" msgstr "Ordem" #: ../plugins/gtkui/interface.c:365 -#: ../plugins/gtkui/deadbeef.glade.h:69 +#: ../plugins/gtkui/deadbeef.glade.h:70 msgid "Linear" msgstr "Linear" #: ../plugins/gtkui/interface.c:370 -#: ../plugins/gtkui/deadbeef.glade.h:119 +#: ../plugins/gtkui/deadbeef.glade.h:120 msgid "Shuffle tracks" msgstr "Embaralhar faixas" #: ../plugins/gtkui/interface.c:375 -#: ../plugins/gtkui/deadbeef.glade.h:118 +#: ../plugins/gtkui/deadbeef.glade.h:119 msgid "Shuffle albums" msgstr "Embaralhar álbuns" #: ../plugins/gtkui/interface.c:380 -#: ../plugins/gtkui/deadbeef.glade.h:102 +#: ../plugins/gtkui/deadbeef.glade.h:103 msgid "Random" msgstr "Aleatória" #: ../plugins/gtkui/interface.c:386 -#: ../plugins/gtkui/deadbeef.glade.h:73 +#: ../plugins/gtkui/deadbeef.glade.h:74 msgid "Looping" msgstr "Repetição" #: ../plugins/gtkui/interface.c:393 -#: ../plugins/gtkui/deadbeef.glade.h:71 +#: ../plugins/gtkui/deadbeef.glade.h:72 msgid "Loop All" msgstr "Repetir tudo" #: ../plugins/gtkui/interface.c:398 -#: ../plugins/gtkui/deadbeef.glade.h:72 +#: ../plugins/gtkui/deadbeef.glade.h:73 msgid "Loop Single Song" msgstr "Repetir a música" #: ../plugins/gtkui/interface.c:403 -#: ../plugins/gtkui/deadbeef.glade.h:35 +#: ../plugins/gtkui/deadbeef.glade.h:36 msgid "Don't Loop" msgstr "Não repetir" #: ../plugins/gtkui/interface.c:409 -#: ../plugins/gtkui/deadbeef.glade.h:109 +#: ../plugins/gtkui/deadbeef.glade.h:110 msgid "Scroll follows playback" msgstr "Rolagem segue a reprodução" #: ../plugins/gtkui/interface.c:414 -#: ../plugins/gtkui/deadbeef.glade.h:25 +#: ../plugins/gtkui/deadbeef.glade.h:26 msgid "Cursor follows playback" msgstr "Cursor segue a reprodução" #: ../plugins/gtkui/interface.c:418 -#: ../plugins/gtkui/deadbeef.glade.h:125 +#: ../plugins/gtkui/deadbeef.glade.h:126 msgid "Stop after current" msgstr "Parar após a atual" #: ../plugins/gtkui/interface.c:430 -#: ../plugins/gtkui/deadbeef.glade.h:65 +#: ../plugins/gtkui/deadbeef.glade.h:66 msgid "Jump to current track" msgstr "Ir para a faixa atual" #: ../plugins/gtkui/interface.c:437 #: ../plugins/gtkui/interface.c:444 -#: ../plugins/gtkui/deadbeef.glade.h:157 +#: ../plugins/gtkui/deadbeef.glade.h:158 msgid "_Help" msgstr "Aj_uda" #: ../plugins/gtkui/interface.c:452 -#: ../plugins/gtkui/deadbeef.glade.h:150 +#: ../plugins/gtkui/deadbeef.glade.h:151 msgid "_ChangeLog" msgstr "Registro de _alterações" #: ../plugins/gtkui/interface.c:461 -#: ../plugins/gtkui/deadbeef.glade.h:156 +#: ../plugins/gtkui/deadbeef.glade.h:157 msgid "_GPLv2" msgstr "_GPLv2" #: ../plugins/gtkui/interface.c:465 -#: ../plugins/gtkui/deadbeef.glade.h:158 +#: ../plugins/gtkui/deadbeef.glade.h:159 msgid "_LGPLv2.1" msgstr "_LGPLv2.1" #: ../plugins/gtkui/interface.c:474 -#: ../plugins/gtkui/deadbeef.glade.h:147 +#: ../plugins/gtkui/deadbeef.glade.h:148 msgid "_About" msgstr "_Sobre" #: ../plugins/gtkui/interface.c:482 -#: ../plugins/gtkui/deadbeef.glade.h:164 +#: ../plugins/gtkui/deadbeef.glade.h:165 msgid "_Translators" msgstr "_Tradutores" #: ../plugins/gtkui/interface.c:898 -#: ../plugins/gtkui/deadbeef.glade.h:110 +#: ../plugins/gtkui/deadbeef.glade.h:111 msgid "Search" msgstr "Pesquisar" #: ../plugins/gtkui/interface.c:973 -#: ../plugins/gtkui/deadbeef.glade.h:124 +#: ../plugins/gtkui/deadbeef.glade.h:125 msgid "Stop" msgstr "Parar" #: ../plugins/gtkui/interface.c:981 -#: ../plugins/gtkui/deadbeef.glade.h:87 +#: ../plugins/gtkui/deadbeef.glade.h:88 msgid "Play" msgstr "Reproduzir" #: ../plugins/gtkui/interface.c:989 -#: ../plugins/gtkui/deadbeef.glade.h:86 +#: ../plugins/gtkui/deadbeef.glade.h:87 msgid "Pause" msgstr "Pausar" #: ../plugins/gtkui/interface.c:997 -#: ../plugins/gtkui/deadbeef.glade.h:94 +#: ../plugins/gtkui/deadbeef.glade.h:95 msgid "Previous" msgstr "Anterior " #: ../plugins/gtkui/interface.c:1005 -#: ../plugins/gtkui/deadbeef.glade.h:79 +#: ../plugins/gtkui/deadbeef.glade.h:80 msgid "Next" msgstr "Próxima" #: ../plugins/gtkui/interface.c:1013 -#: ../plugins/gtkui/deadbeef.glade.h:88 +#: ../plugins/gtkui/deadbeef.glade.h:89 msgid "Play Random" msgstr "Reprodução aleatória" @@ -542,49 +540,49 @@ msgid "About" msgstr "Sobre" #: ../plugins/gtkui/interface.c:1035 -#: ../plugins/gtkui/deadbeef.glade.h:101 +#: ../plugins/gtkui/deadbeef.glade.h:102 msgid "Quit" msgstr "Sair" #: ../plugins/gtkui/interface.c:1225 -#: ../plugins/gtkui/deadbeef.glade.h:137 +#: ../plugins/gtkui/deadbeef.glade.h:138 msgid "Track Properties" msgstr "Propriedades da faixa" #: ../plugins/gtkui/interface.c:1270 -#: ../plugins/gtkui/deadbeef.glade.h:117 +#: ../plugins/gtkui/deadbeef.glade.h:118 msgid "Settings" msgstr "Configuração" #: ../plugins/gtkui/interface.c:1296 -#: ../plugins/gtkui/deadbeef.glade.h:148 +#: ../plugins/gtkui/deadbeef.glade.h:149 msgid "_Apply" msgstr "_Aplicar" #: ../plugins/gtkui/interface.c:1317 #: ../plugins/gtkui/interface.c:1363 -#: ../plugins/gtkui/deadbeef.glade.h:152 +#: ../plugins/gtkui/deadbeef.glade.h:153 msgid "_Close" msgstr "_Fechar" #: ../plugins/gtkui/interface.c:1321 -#: ../plugins/gtkui/deadbeef.glade.h:74 +#: ../plugins/gtkui/deadbeef.glade.h:75 msgid "Metadata" msgstr "Metadados" #: ../plugins/gtkui/interface.c:1367 -#: ../plugins/gtkui/plcommon.c:597 -#: ../plugins/gtkui/deadbeef.glade.h:95 +#: ../plugins/gtkui/plcommon.c:603 +#: ../plugins/gtkui/deadbeef.glade.h:96 msgid "Properties" msgstr "Propriedades" #: ../plugins/gtkui/interface.c:1494 -#: ../plugins/gtkui/deadbeef.glade.h:38 +#: ../plugins/gtkui/deadbeef.glade.h:39 msgid "Enter new column title here" msgstr "Digite o novo título da coluna aqui" #: ../plugins/gtkui/interface.c:1502 -#: ../plugins/gtkui/deadbeef.glade.h:139 +#: ../plugins/gtkui/deadbeef.glade.h:140 msgid "Type:" msgstr "Tipo:" @@ -594,7 +592,7 @@ msgstr "Índice de itens" #. create default set of columns #: ../plugins/gtkui/interface.c:1511 -#: ../plugins/gtkui/mainplaylist.c:305 +#: ../plugins/gtkui/mainplaylist.c:312 msgid "Playing" msgstr "Em reprodução" @@ -607,24 +605,24 @@ msgid "Artist - Album" msgstr "Artista - Álbum" #: ../plugins/gtkui/interface.c:1517 -#: ../plugins/gtkui/mainplaylist.c:309 -#: ../plugins/gtkui/search.c:386 +#: ../plugins/gtkui/mainplaylist.c:316 +#: ../plugins/gtkui/search.c:394 msgid "Duration" msgstr "Duração" #: ../plugins/gtkui/interface.c:1518 -#: ../translation/extra.c:70 +#: ../translation/extra.c:71 msgid "Track Number" msgstr "Número da faixa" #: ../plugins/gtkui/interface.c:1519 -#: ../translation/extra.c:67 +#: ../translation/extra.c:68 msgid "Band / Album Artist" msgstr "Banda / Artista do álbum" #: ../plugins/gtkui/interface.c:1526 -#: ../plugins/gtkui/interface.c:3089 -#: ../plugins/gtkui/deadbeef.glade.h:43 +#: ../plugins/gtkui/interface.c:3098 +#: ../plugins/gtkui/deadbeef.glade.h:44 msgid "Format:" msgstr "Formato:" @@ -642,434 +640,436 @@ msgid "Right" msgstr "Direita" #: ../plugins/gtkui/interface.c:1583 -#: ../plugins/gtkui/interface.c:2892 -#: ../plugins/gtkui/interface.c:3004 -#: ../plugins/gtkui/interface.c:3130 -#: ../plugins/gtkui/deadbeef.glade.h:149 +#: ../plugins/gtkui/interface.c:2901 +#: ../plugins/gtkui/interface.c:3013 +#: ../plugins/gtkui/interface.c:3139 +#: ../plugins/gtkui/deadbeef.glade.h:150 msgid "_Cancel" msgstr "_Cancelar" #: ../plugins/gtkui/interface.c:1604 -#: ../plugins/gtkui/interface.c:2913 -#: ../plugins/gtkui/interface.c:3025 -#: ../plugins/gtkui/interface.c:3151 -#: ../plugins/gtkui/deadbeef.glade.h:160 +#: ../plugins/gtkui/interface.c:2922 +#: ../plugins/gtkui/interface.c:3034 +#: ../plugins/gtkui/interface.c:3160 +#: ../plugins/gtkui/deadbeef.glade.h:161 msgid "_OK" msgstr "_OK" -#: ../plugins/gtkui/interface.c:1818 -#: ../plugins/gtkui/deadbeef.glade.h:83 +#: ../plugins/gtkui/interface.c:1819 +#: ../plugins/gtkui/deadbeef.glade.h:84 msgid "Output plugin:" msgstr "Plugin de saída:" -#: ../plugins/gtkui/interface.c:1831 -#: ../plugins/gtkui/deadbeef.glade.h:82 +#: ../plugins/gtkui/interface.c:1832 +#: ../plugins/gtkui/deadbeef.glade.h:83 msgid "Output device:" msgstr "Dispositivo de saída:" -#: ../plugins/gtkui/interface.c:1840 -#: ../plugins/gtkui/deadbeef.glade.h:122 +#: ../plugins/gtkui/interface.c:1841 +#: ../plugins/gtkui/deadbeef.glade.h:12 +msgid "Always convert 8 bit audio to 16 bit" +msgstr "Sempre converter áudio de 8 bits para 16 bits" + +#: ../plugins/gtkui/interface.c:1845 +#: ../plugins/gtkui/deadbeef.glade.h:123 msgid "Sound" msgstr "Som" -#: ../plugins/gtkui/interface.c:1853 -#: ../plugins/gtkui/deadbeef.glade.h:104 +#: ../plugins/gtkui/interface.c:1858 +#: ../plugins/gtkui/deadbeef.glade.h:105 msgid "Replaygain mode:" msgstr "Modo de normalização:" -#: ../plugins/gtkui/interface.c:1862 +#: ../plugins/gtkui/interface.c:1867 msgid "Disable" -msgstr "Desabilitar" +msgstr "Desabilitado" -#: ../plugins/gtkui/interface.c:1863 +#: ../plugins/gtkui/interface.c:1868 msgid "Track" msgstr "Faixa" -#: ../plugins/gtkui/interface.c:1866 -#: ../plugins/gtkui/deadbeef.glade.h:105 +#: ../plugins/gtkui/interface.c:1871 +#: ../plugins/gtkui/deadbeef.glade.h:106 msgid "Replaygain peak scale" msgstr "Ajustar a normalização com o nível de pico" -#: ../plugins/gtkui/interface.c:1874 -#: ../plugins/gtkui/deadbeef.glade.h:106 +#: ../plugins/gtkui/interface.c:1879 +#: ../plugins/gtkui/deadbeef.glade.h:107 msgid "Replaygain preamp:" msgstr "Pré-amplificação da normalização:" -#: ../plugins/gtkui/interface.c:1878 +#: ../plugins/gtkui/interface.c:1883 #: ../plugins/gtkui/deadbeef.glade.h:2 msgid "-12 dB" msgstr "-12 dB" -#: ../plugins/gtkui/interface.c:1888 +#: ../plugins/gtkui/interface.c:1893 #: ../plugins/gtkui/deadbeef.glade.h:1 msgid "+12 dB" msgstr "+12 dB" -#: ../plugins/gtkui/interface.c:1896 +#: ../plugins/gtkui/interface.c:1901 #: ../plugins/gtkui/deadbeef.glade.h:7 msgid "Add files from command line (or file manager) to this playlist:" -msgstr "Adicionar arquivos pela linha de comando (ou gerenciador de arquivos) à esta lista de reprodução:" +msgstr "Adicionar arquivos pela linha de comando (ou gerenciador de arquivos) a esta lista de reprodução:" -#: ../plugins/gtkui/interface.c:1905 -#: ../plugins/gtkui/deadbeef.glade.h:107 +#: ../plugins/gtkui/interface.c:1910 +#: ../plugins/gtkui/deadbeef.glade.h:108 msgid "Resume previous session on startup" msgstr "Continuar a sessão anterior ao iniciar" -#: ../plugins/gtkui/interface.c:1909 -#: ../plugins/gtkui/deadbeef.glade.h:36 +#: ../plugins/gtkui/interface.c:1914 +#: ../plugins/gtkui/deadbeef.glade.h:37 msgid "Don't add from archives when adding folders" msgstr "Não adicionar de arquivos ao adicionar pastas" -#: ../plugins/gtkui/interface.c:1913 -#: ../plugins/gtkui/deadbeef.glade.h:89 +#: ../plugins/gtkui/interface.c:1918 +#: ../plugins/gtkui/deadbeef.glade.h:90 msgid "Playback" msgstr "Reprodução" -#: ../plugins/gtkui/interface.c:1934 -#: ../plugins/gtkui/interface.c:2466 -#: ../plugins/gtkui/deadbeef.glade.h:21 +#: ../plugins/gtkui/interface.c:1939 +#: ../plugins/gtkui/interface.c:2471 +#: ../plugins/gtkui/deadbeef.glade.h:22 #: ../plugins/converter/interface.c:657 -#: ../plugins/converter/converter.glade.h:8 msgid "Configure" msgstr "Configurar" -#: ../plugins/gtkui/interface.c:1969 -#: ../plugins/gtkui/deadbeef.glade.h:28 +#: ../plugins/gtkui/interface.c:1974 +#: ../plugins/gtkui/deadbeef.glade.h:29 msgid "DSP Chain Preset" msgstr "Predefinição de corrente do DSP" -#: ../plugins/gtkui/interface.c:1981 -#: ../plugins/gtkui/deadbeef.glade.h:159 +#: ../plugins/gtkui/interface.c:1986 +#: ../plugins/gtkui/deadbeef.glade.h:160 msgid "_Load" msgstr "_Carregar" -#: ../plugins/gtkui/interface.c:1985 -#: ../plugins/gtkui/deadbeef.glade.h:27 +#: ../plugins/gtkui/interface.c:1990 +#: ../plugins/gtkui/deadbeef.glade.h:28 msgid "DSP" msgstr "DSP" -#: ../plugins/gtkui/interface.c:1994 -#: ../plugins/gtkui/deadbeef.glade.h:18 +#: ../plugins/gtkui/interface.c:1999 +#: ../plugins/gtkui/deadbeef.glade.h:19 msgid "Close minimizes to tray" msgstr "Fechar minimiza para a área de notificação" -#: ../plugins/gtkui/interface.c:1998 -#: ../plugins/gtkui/deadbeef.glade.h:76 +#: ../plugins/gtkui/interface.c:2003 +#: ../plugins/gtkui/deadbeef.glade.h:77 msgid "Middle mouse button closes playlist" msgstr "Botão do meio do mouse fecha a lista" -#: ../plugins/gtkui/interface.c:2002 -#: ../plugins/gtkui/deadbeef.glade.h:49 +#: ../plugins/gtkui/interface.c:2007 +#: ../plugins/gtkui/deadbeef.glade.h:50 msgid "Hide system tray icon" msgstr "Ocultar o ícone na área de notificação" -#: ../plugins/gtkui/interface.c:2006 -#: ../plugins/gtkui/deadbeef.glade.h:141 +#: ../plugins/gtkui/interface.c:2011 +#: ../plugins/gtkui/deadbeef.glade.h:142 msgid "Use bold font for currently playing track" msgstr "Usar fonte em negrito para a faixa em reprodução" -#: ../plugins/gtkui/interface.c:2010 -#: ../plugins/gtkui/deadbeef.glade.h:48 +#: ../plugins/gtkui/interface.c:2015 +#: ../plugins/gtkui/deadbeef.glade.h:49 msgid "Hide \"Delete from disk\" context menu item" msgstr "Ocultar item \"Excluir do disco\" do menu de contexto" -#: ../plugins/gtkui/interface.c:2014 -#: ../plugins/gtkui/deadbeef.glade.h:15 +#: ../plugins/gtkui/interface.c:2019 +#: ../plugins/gtkui/deadbeef.glade.h:16 msgid "Auto-name playlists when adding a single folder" msgstr "Autonomear listas de reprodução ao adicionar uma única pasta" -#: ../plugins/gtkui/interface.c:2022 -#: ../plugins/gtkui/deadbeef.glade.h:52 +#: ../plugins/gtkui/interface.c:2027 +#: ../plugins/gtkui/deadbeef.glade.h:53 msgid "Interface refresh rate (times per second):" msgstr "Taxa de atualização da interface (vezes por segundo):" -#: ../plugins/gtkui/interface.c:2036 -#: ../plugins/gtkui/deadbeef.glade.h:135 +#: ../plugins/gtkui/interface.c:2041 +#: ../plugins/gtkui/deadbeef.glade.h:136 msgid "Titlebar text while playing:" msgstr "Texto na barra de título durante a reprodução:" -#: ../plugins/gtkui/interface.c:2050 -#: ../plugins/gtkui/deadbeef.glade.h:136 +#: ../plugins/gtkui/interface.c:2055 +#: ../plugins/gtkui/deadbeef.glade.h:137 msgid "Titlebar text while stopped:" msgstr "Texto na barra de título quando parado:" -#: ../plugins/gtkui/interface.c:2064 -#: ../plugins/gtkui/deadbeef.glade.h:45 +#: ../plugins/gtkui/interface.c:2069 +#: ../plugins/gtkui/deadbeef.glade.h:46 msgid "GUI Plugin (changing requires restart):" msgstr "Plugin da interface gráfica (mudança requer reinício):" -#: ../plugins/gtkui/interface.c:2072 -#: ../plugins/gtkui/deadbeef.glade.h:44 +#: ../plugins/gtkui/interface.c:2077 +#: ../plugins/gtkui/deadbeef.glade.h:45 msgid "GUI" msgstr "Interface do usuário" -#: ../plugins/gtkui/interface.c:2087 -#: ../plugins/gtkui/interface.c:2131 -#: ../plugins/gtkui/deadbeef.glade.h:84 +#: ../plugins/gtkui/interface.c:2092 +#: ../plugins/gtkui/interface.c:2136 +#: ../plugins/gtkui/deadbeef.glade.h:85 msgid "Override" msgstr "Sobrepujar" -#: ../plugins/gtkui/interface.c:2096 -#: ../plugins/gtkui/deadbeef.glade.h:41 +#: ../plugins/gtkui/interface.c:2101 +#: ../plugins/gtkui/deadbeef.glade.h:42 msgid "Foreground" msgstr "Primeiro plano" -#: ../plugins/gtkui/interface.c:2103 -#: ../plugins/gtkui/deadbeef.glade.h:16 +#: ../plugins/gtkui/interface.c:2108 +#: ../plugins/gtkui/deadbeef.glade.h:17 msgid "Background" msgstr "Segundo plano" -#: ../plugins/gtkui/interface.c:2122 -#: ../plugins/gtkui/deadbeef.glade.h:111 +#: ../plugins/gtkui/interface.c:2127 +#: ../plugins/gtkui/deadbeef.glade.h:112 msgid "Seekbar/Volumebar colors" msgstr "Cores das barras volume/pesquisa" -#: ../plugins/gtkui/interface.c:2140 -#: ../plugins/gtkui/deadbeef.glade.h:75 +#: ../plugins/gtkui/interface.c:2145 +#: ../plugins/gtkui/deadbeef.glade.h:76 msgid "Middle" msgstr "Meio" -#: ../plugins/gtkui/interface.c:2147 -#: ../plugins/gtkui/deadbeef.glade.h:68 +#: ../plugins/gtkui/interface.c:2152 +#: ../plugins/gtkui/deadbeef.glade.h:69 msgid "Light" msgstr "Claro" -#: ../plugins/gtkui/interface.c:2154 -#: ../plugins/gtkui/deadbeef.glade.h:29 +#: ../plugins/gtkui/interface.c:2159 +#: ../plugins/gtkui/deadbeef.glade.h:30 msgid "Dark" msgstr "Escuro" -#: ../plugins/gtkui/interface.c:2185 -#: ../plugins/gtkui/deadbeef.glade.h:17 +#: ../plugins/gtkui/interface.c:2190 +#: ../plugins/gtkui/deadbeef.glade.h:18 msgid "Base" msgstr "Base" -#: ../plugins/gtkui/interface.c:2192 -#: ../plugins/gtkui/interface.c:2249 -#: ../plugins/gtkui/deadbeef.glade.h:132 +#: ../plugins/gtkui/interface.c:2197 +#: ../plugins/gtkui/interface.c:2254 +#: ../plugins/gtkui/deadbeef.glade.h:133 msgid "Text" msgstr "Texto" -#: ../plugins/gtkui/interface.c:2205 -#: ../plugins/gtkui/deadbeef.glade.h:129 +#: ../plugins/gtkui/interface.c:2210 +#: ../plugins/gtkui/deadbeef.glade.h:130 msgid "Tab strip colors" msgstr "Cores do separador" -#: ../plugins/gtkui/interface.c:2214 -#: ../plugins/gtkui/deadbeef.glade.h:85 +#: ../plugins/gtkui/interface.c:2219 +#: ../plugins/gtkui/deadbeef.glade.h:86 msgid "Override (looses GTK treeview theming, but speeds up rendering)" msgstr "Sobrepujar (perde o tema GTK na visão em árvore, mas acelera a renderização)" -#: ../plugins/gtkui/interface.c:2223 -#: ../plugins/gtkui/deadbeef.glade.h:40 +#: ../plugins/gtkui/interface.c:2228 +#: ../plugins/gtkui/deadbeef.glade.h:41 msgid "Even row" msgstr "Linha par" -#: ../plugins/gtkui/interface.c:2230 -#: ../plugins/gtkui/deadbeef.glade.h:80 +#: ../plugins/gtkui/interface.c:2235 +#: ../plugins/gtkui/deadbeef.glade.h:81 msgid "Odd row" msgstr "Linha ímpar" -#: ../plugins/gtkui/interface.c:2256 -#: ../plugins/gtkui/deadbeef.glade.h:114 +#: ../plugins/gtkui/interface.c:2261 +#: ../plugins/gtkui/deadbeef.glade.h:115 msgid "Selected row" msgstr "Linha selecionada" -#: ../plugins/gtkui/interface.c:2275 -#: ../plugins/gtkui/deadbeef.glade.h:115 +#: ../plugins/gtkui/interface.c:2280 +#: ../plugins/gtkui/deadbeef.glade.h:116 msgid "Selected text" msgstr "Texto selecionado" -#: ../plugins/gtkui/interface.c:2288 -#: ../plugins/gtkui/deadbeef.glade.h:24 +#: ../plugins/gtkui/interface.c:2293 +#: ../plugins/gtkui/deadbeef.glade.h:25 msgid "Cursor" msgstr "Cursor" -#: ../plugins/gtkui/interface.c:2301 -#: ../plugins/gtkui/deadbeef.glade.h:90 +#: ../plugins/gtkui/interface.c:2306 +#: ../plugins/gtkui/deadbeef.glade.h:91 msgid "Playlist colors" msgstr "Cores da lista de reprodução" -#: ../plugins/gtkui/interface.c:2305 -#: ../plugins/gtkui/deadbeef.glade.h:19 +#: ../plugins/gtkui/interface.c:2310 +#: ../plugins/gtkui/deadbeef.glade.h:20 msgid "Colors" msgstr "Cores" -#: ../plugins/gtkui/interface.c:2314 -#: ../plugins/gtkui/deadbeef.glade.h:37 +#: ../plugins/gtkui/interface.c:2319 +#: ../plugins/gtkui/deadbeef.glade.h:38 msgid "Enable Proxy Server" msgstr "Habilitar servidor proxy" -#: ../plugins/gtkui/interface.c:2322 -#: ../plugins/gtkui/deadbeef.glade.h:97 +#: ../plugins/gtkui/interface.c:2327 +#: ../plugins/gtkui/deadbeef.glade.h:98 msgid "Proxy Server Address:" msgstr "Endereço do servidor proxy:" -#: ../plugins/gtkui/interface.c:2336 -#: ../plugins/gtkui/deadbeef.glade.h:98 +#: ../plugins/gtkui/interface.c:2341 +#: ../plugins/gtkui/deadbeef.glade.h:99 msgid "Proxy Server Port:" msgstr "Porta do servidor proxy:" -#: ../plugins/gtkui/interface.c:2350 -#: ../plugins/gtkui/deadbeef.glade.h:99 +#: ../plugins/gtkui/interface.c:2355 +#: ../plugins/gtkui/deadbeef.glade.h:100 msgid "Proxy Type:" msgstr "Tipo de proxy:" -#: ../plugins/gtkui/interface.c:2369 -#: ../plugins/gtkui/deadbeef.glade.h:100 +#: ../plugins/gtkui/interface.c:2374 +#: ../plugins/gtkui/deadbeef.glade.h:101 msgid "Proxy Username:" msgstr "Nome de usuário do proxy:" -#: ../plugins/gtkui/interface.c:2382 -#: ../plugins/gtkui/deadbeef.glade.h:96 +#: ../plugins/gtkui/interface.c:2387 +#: ../plugins/gtkui/deadbeef.glade.h:97 msgid "Proxy Password:" msgstr "Senha do proxy:" -#: ../plugins/gtkui/interface.c:2392 -#: ../plugins/gtkui/deadbeef.glade.h:77 +#: ../plugins/gtkui/interface.c:2397 +#: ../plugins/gtkui/deadbeef.glade.h:78 msgid "Network" msgstr "Rede" -#: ../plugins/gtkui/interface.c:2423 -#: ../plugins/gtkui/deadbeef.glade.h:142 +#: ../plugins/gtkui/interface.c:2428 +#: ../plugins/gtkui/deadbeef.glade.h:143 msgid "Version: " msgstr "Versão: " -#: ../plugins/gtkui/interface.c:2487 -#: ../plugins/gtkui/deadbeef.glade.h:22 -#: ../translation/extra.c:77 +#: ../plugins/gtkui/interface.c:2492 +#: ../plugins/gtkui/deadbeef.glade.h:23 +#: ../translation/extra.c:78 msgid "Copyright" msgstr "Direitos autorais" -#: ../plugins/gtkui/interface.c:2497 -#: ../plugins/gtkui/deadbeef.glade.h:92 +#: ../plugins/gtkui/interface.c:2502 +#: ../plugins/gtkui/deadbeef.glade.h:93 msgid "Plugins" msgstr "Plugins" -#: ../plugins/gtkui/interface.c:2972 -#: ../plugins/gtkui/deadbeef.glade.h:140 +#: ../plugins/gtkui/interface.c:2981 +#: ../plugins/gtkui/deadbeef.glade.h:141 msgid "URL:" msgstr "URL:" -#: ../plugins/gtkui/interface.c:3074 -#: ../plugins/gtkui/deadbeef.glade.h:46 +#: ../plugins/gtkui/interface.c:3083 +#: ../plugins/gtkui/deadbeef.glade.h:47 msgid "Group By" msgstr "Agrupar por" -#: ../plugins/gtkui/interface.c:3198 -#: ../plugins/gtkui/deadbeef.glade.h:121 +#: ../plugins/gtkui/interface.c:3207 +#: ../plugins/gtkui/deadbeef.glade.h:122 msgid "Sort by..." msgstr "Ordenar por..." -#: ../plugins/gtkui/interface.c:3214 -#: ../plugins/gtkui/deadbeef.glade.h:42 +#: ../plugins/gtkui/interface.c:3223 +#: ../plugins/gtkui/deadbeef.glade.h:43 msgid "Format" msgstr "Formato" -#: ../plugins/gtkui/interface.c:3244 +#: ../plugins/gtkui/interface.c:3253 msgid "Ascending" msgstr "Ascendente" -#: ../plugins/gtkui/interface.c:3245 +#: ../plugins/gtkui/interface.c:3254 msgid "Descending" msgstr "Descendente" -#: ../plugins/gtkui/interface.c:3298 -#: ../plugins/gtkui/deadbeef.glade.h:112 +#: ../plugins/gtkui/interface.c:3307 +#: ../plugins/gtkui/deadbeef.glade.h:113 #: ../plugins/converter/interface.c:758 -#: ../plugins/converter/converter.glade.h:44 msgid "Select DSP Plugin" msgstr "Selecionar plugin do DSP" -#: ../plugins/gtkui/interface.c:3314 -#: ../plugins/gtkui/deadbeef.glade.h:91 -#: ../plugins/converter/convgui.c:1008 +#: ../plugins/gtkui/interface.c:3323 +#: ../plugins/gtkui/deadbeef.glade.h:92 +#: ../plugins/converter/convgui.c:1016 #: ../plugins/converter/interface.c:774 #: ../plugins/gtkui/dspconfig.c:139 -#: ../plugins/converter/converter.glade.h:38 msgid "Plugin" msgstr "Plugin" -#: ../plugins/gtkui/interface.c:3400 -#: ../plugins/gtkui/deadbeef.glade.h:131 +#: ../plugins/gtkui/interface.c:3409 +#: ../plugins/gtkui/deadbeef.glade.h:132 msgid "Tag Writer Settings" msgstr "Configuração do editor de etiquetas" -#: ../plugins/gtkui/interface.c:3431 -#: ../plugins/gtkui/deadbeef.glade.h:145 +#: ../plugins/gtkui/interface.c:3440 +#: ../plugins/gtkui/deadbeef.glade.h:146 msgid "Write ID3v2" msgstr "Escrever ID3v2" -#: ../plugins/gtkui/interface.c:3435 -#: ../plugins/gtkui/interface.c:3562 -#: ../plugins/gtkui/deadbeef.glade.h:144 +#: ../plugins/gtkui/interface.c:3444 +#: ../plugins/gtkui/interface.c:3571 +#: ../plugins/gtkui/deadbeef.glade.h:145 msgid "Write ID3v1" msgstr "Escrever ID3v1" -#: ../plugins/gtkui/interface.c:3439 -#: ../plugins/gtkui/interface.c:3518 -#: ../plugins/gtkui/interface.c:3558 -#: ../plugins/gtkui/deadbeef.glade.h:143 +#: ../plugins/gtkui/interface.c:3448 +#: ../plugins/gtkui/interface.c:3527 +#: ../plugins/gtkui/interface.c:3567 +#: ../plugins/gtkui/deadbeef.glade.h:144 msgid "Write APEv2" msgstr "Escrever APEv2" -#: ../plugins/gtkui/interface.c:3447 -#: ../plugins/gtkui/interface.c:3526 -#: ../plugins/gtkui/deadbeef.glade.h:128 +#: ../plugins/gtkui/interface.c:3456 +#: ../plugins/gtkui/interface.c:3535 +#: ../plugins/gtkui/deadbeef.glade.h:129 msgid "Strip ID3v2" msgstr "Remover ID3v2" -#: ../plugins/gtkui/interface.c:3451 -#: ../plugins/gtkui/interface.c:3574 -#: ../plugins/gtkui/deadbeef.glade.h:127 +#: ../plugins/gtkui/interface.c:3460 +#: ../plugins/gtkui/interface.c:3583 +#: ../plugins/gtkui/deadbeef.glade.h:128 msgid "Strip ID3v1" msgstr "Remover ID3v1" -#: ../plugins/gtkui/interface.c:3455 -#: ../plugins/gtkui/interface.c:3530 -#: ../plugins/gtkui/interface.c:3570 -#: ../plugins/gtkui/deadbeef.glade.h:126 +#: ../plugins/gtkui/interface.c:3464 +#: ../plugins/gtkui/interface.c:3539 +#: ../plugins/gtkui/interface.c:3579 +#: ../plugins/gtkui/deadbeef.glade.h:127 msgid "Strip APEv2" msgstr "Remover APEv2" -#: ../plugins/gtkui/interface.c:3463 -#: ../plugins/gtkui/deadbeef.glade.h:51 +#: ../plugins/gtkui/interface.c:3472 +#: ../plugins/gtkui/deadbeef.glade.h:52 msgid "ID3v2 version" msgstr "Versão ID3v2" -#: ../plugins/gtkui/interface.c:3470 +#: ../plugins/gtkui/interface.c:3479 msgid "2.3 (Recommended)" msgstr "2.3 (Recomendado)" -#: ../plugins/gtkui/interface.c:3471 +#: ../plugins/gtkui/interface.c:3480 msgid "2.4" msgstr "2.4" -#: ../plugins/gtkui/interface.c:3477 -#: ../plugins/gtkui/deadbeef.glade.h:50 +#: ../plugins/gtkui/interface.c:3486 +#: ../plugins/gtkui/deadbeef.glade.h:51 msgid "ID3v1 character encoding (default is iso8859-1)" msgstr "Codificação de caracteres ID3v1 (padrão é iso8859-1)" -#: ../plugins/gtkui/interface.c:3514 -#: ../plugins/gtkui/deadbeef.glade.h:146 +#: ../plugins/gtkui/interface.c:3523 +#: ../plugins/gtkui/deadbeef.glade.h:147 msgid "Write ID3v2.4" msgstr "Escrever ID3v2.4" -#: ../plugins/gtkui/mainplaylist.c:306 -#: ../plugins/gtkui/search.c:383 +#: ../plugins/gtkui/mainplaylist.c:313 +#: ../plugins/gtkui/search.c:391 msgid "Artist / Album" msgstr "Artista / Álbum" -#: ../plugins/gtkui/mainplaylist.c:307 -#: ../plugins/gtkui/search.c:384 +#: ../plugins/gtkui/mainplaylist.c:314 +#: ../plugins/gtkui/search.c:392 msgid "Track No" msgstr "Nº da faixa" -#: ../plugins/gtkui/plcommon.c:319 +#: ../plugins/gtkui/plcommon.c:325 msgid "Delete files from disk" msgstr "Excluir arquivos do disco" -#: ../plugins/gtkui/plcommon.c:320 +#: ../plugins/gtkui/plcommon.c:326 msgid "" "Files will be lost. Proceed?\n" "(This dialog can be turned off in GTKUI plugin settings)" @@ -1077,53 +1077,53 @@ msgstr "" "Os arquivos serão perdidos. Continuar?\n" "(Este diálogo pode ser desligado nas configurações do plugin GTKUI)" -#: ../plugins/gtkui/plcommon.c:321 +#: ../plugins/gtkui/plcommon.c:327 #: ../plugins/gtkui/trkproperties.c:162 -#: ../plugins/gtkui/trkproperties.c:674 -#: ../plugins/converter/convgui.c:751 -#: ../plugins/converter/convgui.c:1128 +#: ../plugins/gtkui/trkproperties.c:693 +#: ../plugins/converter/convgui.c:759 +#: ../plugins/converter/convgui.c:1136 msgid "Warning" msgstr "Alerta" -#: ../plugins/gtkui/plcommon.c:423 +#: ../plugins/gtkui/plcommon.c:429 msgid "Add to playback queue" msgstr "Colocar na fila da lista de reprodução" -#: ../plugins/gtkui/plcommon.c:428 +#: ../plugins/gtkui/plcommon.c:434 msgid "Remove from playback queue" msgstr "Remover da fila da lista de reprodução" -#: ../plugins/gtkui/plcommon.c:436 +#: ../plugins/gtkui/plcommon.c:442 msgid "Reload metadata" msgstr "Recarregar metadados" -#: ../plugins/gtkui/plcommon.c:455 +#: ../plugins/gtkui/plcommon.c:461 msgid "Remove from disk" msgstr "Remover do disco" -#: ../plugins/gtkui/plcommon.c:834 -#: ../plugins/gtkui/plcommon.c:959 +#: ../plugins/gtkui/plcommon.c:840 +#: ../plugins/gtkui/plcommon.c:965 msgid "Add column" msgstr "Adicionar coluna" -#: ../plugins/gtkui/plcommon.c:864 -#: ../plugins/gtkui/plcommon.c:963 +#: ../plugins/gtkui/plcommon.c:870 +#: ../plugins/gtkui/plcommon.c:969 msgid "Edit column" msgstr "Editar coluna" -#: ../plugins/gtkui/plcommon.c:967 +#: ../plugins/gtkui/plcommon.c:973 msgid "Remove column" msgstr "Remover coluna" -#: ../plugins/gtkui/plcommon.c:977 +#: ../plugins/gtkui/plcommon.c:983 msgid "Group by" msgstr "Agrupar por" -#: ../plugins/gtkui/plcommon.c:984 +#: ../plugins/gtkui/plcommon.c:990 msgid "None" msgstr "Nenhum" -#: ../plugins/gtkui/plcommon.c:988 +#: ../plugins/gtkui/plcommon.c:994 msgid "Artist/Date/Album" msgstr "Artista/Data/Álbum" @@ -1142,7 +1142,6 @@ msgstr "Dispositivo de áudio padrão" #: ../plugins/gtkui/prefwin.c:318 #: ../plugins/converter/interface.c:649 -#: ../plugins/converter/converter.glade.h:6 msgid "Add" msgstr "Adicionar" @@ -1179,46 +1178,46 @@ msgstr "Deseja realmente fechar esta janela?" msgid "[Multiple values] " msgstr "[Valores múltiplos]" -#: ../plugins/gtkui/trkproperties.c:395 #: ../plugins/gtkui/trkproperties.c:407 +#: ../plugins/gtkui/trkproperties.c:419 msgid "Key" -msgstr "Tecla" +msgstr "Chave" -#: ../plugins/gtkui/trkproperties.c:396 #: ../plugins/gtkui/trkproperties.c:408 +#: ../plugins/gtkui/trkproperties.c:420 msgid "Value" msgstr "Valor" -#: ../plugins/gtkui/trkproperties.c:575 +#: ../plugins/gtkui/trkproperties.c:594 msgid "Writing tags..." msgstr "Escrevendo etiquetas..." -#: ../plugins/gtkui/trkproperties.c:602 +#: ../plugins/gtkui/trkproperties.c:621 msgid "Name:" msgstr "Nome:" -#: ../plugins/gtkui/trkproperties.c:614 +#: ../plugins/gtkui/trkproperties.c:633 msgid "Field names must not start with : or _" msgstr "Os nomes dos campos não devem começar com : ou _" -#: ../plugins/gtkui/trkproperties.c:615 -#: ../plugins/gtkui/trkproperties.c:649 +#: ../plugins/gtkui/trkproperties.c:634 +#: ../plugins/gtkui/trkproperties.c:668 msgid "Cannot add field" msgstr "Incapaz de adicionar campo" -#: ../plugins/gtkui/trkproperties.c:648 +#: ../plugins/gtkui/trkproperties.c:667 msgid "Field with such name already exists, please try different name." msgstr "Um campo com esse nome já existe. Por favor, tente outro nome." -#: ../plugins/gtkui/trkproperties.c:673 +#: ../plugins/gtkui/trkproperties.c:692 msgid "Really remove selected field?" msgstr "Deseja realmente remover o campo selecionado?" -#: ../plugins/gtkui/trkproperties.c:715 +#: ../plugins/gtkui/trkproperties.c:734 msgid "Add field" msgstr "Adicionar campo" -#: ../plugins/gtkui/trkproperties.c:718 +#: ../plugins/gtkui/trkproperties.c:737 msgid "Remove field" msgstr "Remover campo" @@ -1318,18 +1317,20 @@ msgstr "" #: ../main.c:109 #, c-format msgid " for more info, see http://sourceforge.net/apps/mediawiki/deadbeef/index.php?title=Title_Formatting\n" -msgstr " para mais informações, veja http://sourceforge.net/apps/mediawiki/deadbeef/index.php?title=Title_Formatting\n" +msgstr "" +" para mais informações, veja:\n" +"http://sourceforge.net/apps/mediawiki/deadbeef/index.php?title=Title_Formatting\n" -#: ../playlist.c:416 -#: ../playlist.c:2553 +#: ../playlist.c:439 +#: ../playlist.c:2605 msgid "Default" msgstr "Padrão" -#: ../playlist.c:3800 +#: ../playlist.c:3854 msgid "Yes" msgstr "Sim" -#: ../playlist.c:3800 +#: ../playlist.c:3854 msgid "No" msgstr "Não" @@ -1341,7 +1342,7 @@ msgstr "" "2.3 (Recomendado)\n" "2.4" -#: ../plugins/gtkui/deadbeef.glade.h:13 +#: ../plugins/gtkui/deadbeef.glade.h:14 msgid "" "Ascending\n" "Descending" @@ -1349,7 +1350,7 @@ msgstr "" "Ascendente\n" "Descendente" -#: ../plugins/gtkui/deadbeef.glade.h:32 +#: ../plugins/gtkui/deadbeef.glade.h:33 msgid "" "Disable\n" "Track\n" @@ -1359,7 +1360,7 @@ msgstr "" "Faixa\n" "Álbum" -#: ../plugins/gtkui/deadbeef.glade.h:54 +#: ../plugins/gtkui/deadbeef.glade.h:55 msgid "" "Item Index\n" "Playing\n" @@ -1385,7 +1386,7 @@ msgstr "" "Banda / Artista do álbum\n" "Personalizar" -#: ../plugins/gtkui/deadbeef.glade.h:66 +#: ../plugins/gtkui/deadbeef.glade.h:67 msgid "" "Left\n" "Right" @@ -1426,7 +1427,7 @@ msgid "Release device while stopped" msgstr "Liberar dispositivo quando parado" #: ../translation/extra.c:8 -#: ../translation/extra.c:50 +#: ../translation/extra.c:51 msgid "Preferred buffer size" msgstr "Tamanho preferido do buffer" @@ -1460,289 +1461,327 @@ msgstr "URL para scrobbling" msgid "Device file" msgstr "Arquivo de dispositivo" +#: ../translation/extra.c:18 +msgid "OSS4 samplerate bug workaround" +msgstr "Contornar falha da taxa de amostragem do OSS4" + #. Album Artwork plugin -#: ../translation/extra.c:19 +#: ../translation/extra.c:20 msgid "Cache update period (hr)" msgstr "Período para atualização do cache (h)" -#: ../translation/extra.c:20 +#: ../translation/extra.c:21 msgid "Fetch from embedded tags" msgstr "Buscar nas etiquetas embutidas" -#: ../translation/extra.c:21 +#: ../translation/extra.c:22 msgid "Fetch from local folder" msgstr "Buscar numa pasta local" -#: ../translation/extra.c:22 +#: ../translation/extra.c:23 msgid "Local cover file mask" msgstr "Máscara de arquivo de capa local" -#: ../translation/extra.c:23 +#: ../translation/extra.c:24 msgid "Fetch from last.fm" msgstr "Buscar no last.fm" -#: ../translation/extra.c:24 +#: ../translation/extra.c:25 msgid "Fetch from albumart.org" msgstr "Buscar no albumart.org" -#: ../translation/extra.c:25 +#: ../translation/extra.c:26 msgid "Scale artwork towards longer side" msgstr "Escalar a capa do álbum pelo lado maior" #. Audio CD player -#: ../translation/extra.c:27 +#: ../translation/extra.c:28 msgid "Use CDDB/FreeDB" msgstr "Usar CDDB/FreeDB" -#: ../translation/extra.c:28 +#: ../translation/extra.c:29 msgid "Prefer CD-Text over CDDB" msgstr "Preferir CD-Text a CDDB" -#: ../translation/extra.c:29 +#: ../translation/extra.c:30 msgid "CDDB url (e.g. 'freedb.org')" msgstr "URL de CDDB (ex. 'freedb.org')" -#: ../translation/extra.c:30 +#: ../translation/extra.c:31 msgid "CDDB port number (e.g. '888')" msgstr "Número da porta CDDB (ex. '888')" -#: ../translation/extra.c:31 +#: ../translation/extra.c:32 msgid "Prefer CDDB protocol over HTTP" msgstr "Preferir protocolo CDDB ao HTTP" -#: ../translation/extra.c:32 +#: ../translation/extra.c:33 msgid "Enable NRG image support" msgstr "Habilitar suporte ao formato de imagem NRG" #. DUMB module player plugin -#: ../translation/extra.c:34 +#: ../translation/extra.c:35 msgid "Resampling quality (0..2, higher is better)" msgstr "Qualidade de reamostragem (0..2, maior é melhor)" #. Game_Music_Emu decoder plugin -#: ../translation/extra.c:36 +#: ../translation/extra.c:37 msgid "Max song length (in minutes)" msgstr "Duração máxima da música (em minutos)" #. Standard GTK2 user interface plugin -#: ../translation/extra.c:38 +#: ../translation/extra.c:39 msgid "Ask confirmation to delete files from disk" msgstr "Pedir confirmação para excluir arquivos do disco" -#: ../translation/extra.c:39 +#: ../translation/extra.c:40 msgid "Status icon volume control sensitivity" msgstr "Sensibilidade ao controle de volume no ícone de status" -#: ../translation/extra.c:40 +#: ../translation/extra.c:41 msgid "Custom status icon" msgstr "Ícone de status personalizado" -#: ../translation/extra.c:41 +#: ../translation/extra.c:42 msgid "Run gtk_init with --sync (debug mode)" msgstr "Executar gtk_init com --sync (modo de depuração)" -#: ../translation/extra.c:42 +#: ../translation/extra.c:43 msgid "Add separators between plugin context menu items" msgstr "Adicionar separadores entre itens do menu de contexto dos plugins" #. OSD Notify plugin -#: ../translation/extra.c:44 +#: ../translation/extra.c:45 msgid "Notification title format" msgstr "Formato de notificação do título" -#: ../translation/extra.c:45 +#: ../translation/extra.c:46 msgid "Notification content format" msgstr "Formato de notificação do conteúdo" -#: ../translation/extra.c:46 +#: ../translation/extra.c:47 msgid "Show album art" msgstr "Mostrar a capa do álbum" -#: ../translation/extra.c:47 +#: ../translation/extra.c:48 msgid "Album art size (px)" msgstr "Tamanho da capa do álbum (px)" #. PulseAudio output plugin -#: ../translation/extra.c:49 +#: ../translation/extra.c:50 msgid "PulseAudio server" msgstr "Servidor PulseAudio" -#: ../translation/extra.c:51 +#: ../translation/extra.c:52 msgid "Samplerate" msgstr "Taxa de amostragem" #. SHN player plugin -#: ../translation/extra.c:53 +#: ../translation/extra.c:54 msgid "Relative seek table path" msgstr "Caminho relativo da tabela de referência" -#: ../translation/extra.c:54 +#: ../translation/extra.c:55 msgid "Absolute seek table path" msgstr "Caminho absoluto da tabela de referência" -#: ../translation/extra.c:55 +#: ../translation/extra.c:56 msgid "Swap audio bytes (toggle if all you hear is static)" msgstr "Intercâmbio de bytes de áudio (alterne se só ouve estática)" #. SID decoder plugin -#: ../translation/extra.c:57 +#: ../translation/extra.c:58 msgid "Enable HVSC Songlength DB" msgstr "Habilitar banco de dados de duração da HVSC" -#: ../translation/extra.c:58 +#: ../translation/extra.c:59 msgid "Songlengths.txt (from HVSC)" msgstr "Songlengths.txt (da HVSC)" -#: ../translation/extra.c:59 +#: ../translation/extra.c:60 msgid "Bits per sample (8 or 16)" msgstr "Bits por amostra (8 ou 16)" -#: ../translation/extra.c:60 +#: ../translation/extra.c:61 msgid "Default song length (sec)" msgstr "Duração padrão das músicas (em segundos)" #. WildMidi player plugin -#: ../translation/extra.c:62 +#: ../translation/extra.c:63 msgid "Timidity++ bank configuration file" msgstr "Arquivo de configuração para o banco Timidity++" -#: ../translation/extra.c:65 +#: ../translation/extra.c:66 msgid "Track Title" msgstr "Título da faixa" -#: ../translation/extra.c:66 +#: ../translation/extra.c:67 msgid "Performer" msgstr "Artista" -#: ../translation/extra.c:71 +#: ../translation/extra.c:72 msgid "Total Tracks" msgstr "Total de faixas" -#: ../translation/extra.c:72 +#: ../translation/extra.c:73 msgid "Genre" msgstr "Gênero" -#: ../translation/extra.c:73 +#: ../translation/extra.c:74 msgid "Composer" msgstr "Compositor" -#: ../translation/extra.c:74 +#: ../translation/extra.c:75 msgid "Disc Number" msgstr "Número do disco" -#: ../translation/extra.c:75 +#: ../translation/extra.c:76 msgid "Comment" msgstr "Comentário" -#: ../translation/extra.c:76 +#: ../translation/extra.c:77 msgid "Encoder / Vendor" msgstr "Codificador / Fornecedor" -#. FFmpeg deocder plugin #: ../translation/extra.c:79 +msgid "Location" +msgstr "Local" + +#: ../translation/extra.c:80 +msgid "Subtrack Index" +msgstr "Índice de subfaixas" + +#: ../translation/extra.c:81 +msgid "Tag Type(s)" +msgstr "Tipo(s) de etiqueta" + +#: ../translation/extra.c:82 +msgid "Embedded Cuesheet" +msgstr "Cuesheet embutida" + +#: ../translation/extra.c:83 +msgid "Codec" +msgstr "Codec" + +#. FFmpeg deocder plugin +#: ../translation/extra.c:85 msgid "File Extensions (separate with ';')" msgstr "Extensões de arquivo (separadas por \";\")" -#: ../plugins/converter/convgui.c:107 +#. Converter GUI +#: ../translation/extra.c:87 +msgid "Convert" +msgstr "Converter" + +#. Resampler (Secret Rabbit Code) +#: ../translation/extra.c:89 +msgid "Target Samplerate" +msgstr "Taxa de amostragem alvo" + +#: ../translation/extra.c:90 +msgid "Quality / Algorythm" +msgstr "Qualidade / Algoritmo" + +#: ../translation/extra.c:91 +msgid "Automatic Samplerate (overrides Target Samplerate)" +msgstr "Taxa de amostragem automática (sobrepuja a taxa de amostragem alvo)" + +#: ../plugins/converter/convgui.c:108 msgid "The file already exists. Overwrite?" msgstr "O arquivo já existe. Sobrescrever?" -#: ../plugins/converter/convgui.c:109 +#: ../plugins/converter/convgui.c:110 msgid "Converter warning" msgstr "Alerta do conversor" -#: ../plugins/converter/convgui.c:221 +#: ../plugins/converter/convgui.c:222 msgid "Please select encoder" msgstr "Selecione o codificador, por favor" -#: ../plugins/converter/convgui.c:223 +#: ../plugins/converter/convgui.c:224 msgid "Converter error" msgstr "Erro do conversor" -#: ../plugins/converter/convgui.c:247 +#: ../plugins/converter/convgui.c:248 msgid "Converting..." msgstr "Convertendo..." -#: ../plugins/converter/convgui.c:386 -#: ../plugins/converter/convgui.c:488 +#: ../plugins/converter/convgui.c:394 +#: ../plugins/converter/convgui.c:496 msgid "Select folder..." msgstr "Selecionar pasta..." -#: ../plugins/converter/convgui.c:627 +#: ../plugins/converter/convgui.c:635 msgid "Failed to save encoder preset" msgstr "Falha ao salvar predefinição do codificador" -#: ../plugins/converter/convgui.c:629 -#: ../plugins/converter/convgui.c:1027 +#: ../plugins/converter/convgui.c:637 +#: ../plugins/converter/convgui.c:1035 msgid "Check preset folder permissions, try to pick different title, or free up some disk space" msgstr "Verifique as permissões da pasta de predefinições, tente com um título diferente ou libere algum espaço no disco" -#: ../plugins/converter/convgui.c:629 -#: ../plugins/converter/convgui.c:1027 +#: ../plugins/converter/convgui.c:637 +#: ../plugins/converter/convgui.c:1035 msgid "Preset with the same name already exists. Try to pick another title." msgstr "Uma predefinição com o mesmo nome já existe. Tente um título diferente." -#: ../plugins/converter/convgui.c:630 -#: ../plugins/converter/convgui.c:1028 +#: ../plugins/converter/convgui.c:638 +#: ../plugins/converter/convgui.c:1036 msgid "Error" msgstr "Erro" -#: ../plugins/converter/convgui.c:684 +#: ../plugins/converter/convgui.c:692 msgid "Add new encoder" msgstr "Adicionar novo codificador" -#: ../plugins/converter/convgui.c:716 +#: ../plugins/converter/convgui.c:724 msgid "Edit encoder" msgstr "Editar codificador" -#: ../plugins/converter/convgui.c:748 -#: ../plugins/converter/convgui.c:1125 +#: ../plugins/converter/convgui.c:756 +#: ../plugins/converter/convgui.c:1133 msgid "Remove preset" msgstr "Remover predefinição" -#: ../plugins/converter/convgui.c:750 -#: ../plugins/converter/convgui.c:1127 +#: ../plugins/converter/convgui.c:758 +#: ../plugins/converter/convgui.c:1135 msgid "This action will delete the selected preset. Are you sure?" msgstr "Esta ação irá excluir a predefinição selecionada. Tem certeza?" -#: ../plugins/converter/convgui.c:774 +#: ../plugins/converter/convgui.c:782 msgid "Encoders" msgstr "Codificadores" -#: ../plugins/converter/convgui.c:830 +#: ../plugins/converter/convgui.c:838 #: ../plugins/gtkui/dspconfig.c:183 msgid "Add plugin to DSP chain" msgstr "Adicionar plugin à corrente do DSP" -#: ../plugins/converter/convgui.c:1026 +#: ../plugins/converter/convgui.c:1034 msgid "Failed to save DSP preset" msgstr "Falha ao salvar predefinição do DSP" -#: ../plugins/converter/convgui.c:1090 +#: ../plugins/converter/convgui.c:1098 msgid "New DSP Preset" msgstr "Nova predefinição do DSP" -#: ../plugins/converter/convgui.c:1175 +#: ../plugins/converter/convgui.c:1183 msgid "Edit DSP Preset" msgstr "Editar predefinição do DSP" -#: ../plugins/converter/convgui.c:1195 +#: ../plugins/converter/convgui.c:1203 msgid "DSP Presets" msgstr "Predefinições do DSP" #: ../plugins/converter/interface.c:97 -#: ../plugins/converter/converter.glade.h:34 msgid "Output folder:" msgstr "Pasta de saída:" #: ../plugins/converter/interface.c:118 -#: ../plugins/converter/converter.glade.h:33 msgid "Output file name:" msgstr "Nome do arquivo de saída:" #: ../plugins/converter/interface.c:129 -#: ../plugins/converter/converter.glade.h:18 -#, no-c-format msgid "" "Extension (e.g. .mp3) will be appended automatically.\n" "Leave the field empty for default (%a - %t)." @@ -1751,22 +1790,18 @@ msgstr "" "Deixe o campo vazio para o padrão (%a - %t)." #: ../plugins/converter/interface.c:142 -#: ../plugins/converter/converter.glade.h:13 msgid "Encoder:" msgstr "Codificador:" #: ../plugins/converter/interface.c:166 -#: ../plugins/converter/converter.glade.h:10 msgid "DSP preset:" msgstr "Predefinição do DSP:" #: ../plugins/converter/interface.c:189 -#: ../plugins/converter/converter.glade.h:30 msgid "Number of threads:" msgstr "Número de linhas de execução" #: ../plugins/converter/interface.c:202 -#: ../plugins/converter/converter.glade.h:35 msgid "Output sample format:" msgstr "Formato da amostra de saída:" @@ -1795,7 +1830,6 @@ msgid "32 bit float" msgstr "32 bits flutuante" #: ../plugins/converter/interface.c:220 -#: ../plugins/converter/converter.glade.h:49 msgid "When file exists:" msgstr "Quando o arquivo existir:" @@ -1808,38 +1842,31 @@ msgid "Overwrite" msgstr "Sobrescrever" #: ../plugins/converter/interface.c:230 -#: ../plugins/converter/converter.glade.h:39 msgid "Preserve folder structure, starting from:" msgstr "Preservar a estrutura da pasta, começando por:" #: ../plugins/converter/interface.c:386 -#: ../plugins/converter/converter.glade.h:12 msgid "Edit Encoder Preset" msgstr "Editar predefinição do codificador" #: ../plugins/converter/interface.c:409 -#: ../plugins/converter/converter.glade.h:48 msgid "Untitled Encoder" msgstr "Codificador sem título" #: ../plugins/converter/interface.c:417 -#: ../plugins/converter/converter.glade.h:32 msgid "Output file extension:" msgstr "Extensão do arquivo de saída:" #: ../plugins/converter/interface.c:424 -#: ../plugins/converter/converter.glade.h:11 msgid "E.g. mp3" msgstr "Ex. mp3" #: ../plugins/converter/interface.c:432 -#: ../plugins/converter/converter.glade.h:7 msgid "Command line:" msgstr "Linha de comando:" #: ../plugins/converter/interface.c:443 -#: ../plugins/converter/converter.glade.h:15 -#, no-c-format +#, c-format msgid "" "Example: lame - %o\n" "%i for input file, %o for output file, - for stdin" @@ -1848,8 +1875,7 @@ msgstr "" "%i para arquivo de entrada, %o para arquivo de saída, - para entrada padrão (stdin)" #: ../plugins/converter/interface.c:453 -#: ../plugins/converter/converter.glade.h:3 -#, no-c-format +#, c-format msgid "" "<small>%o - output file name\n" "%i - temporary input file name</small>" @@ -1858,7 +1884,6 @@ msgstr "" "%i - nome do arquivo de entrada temporário</small>" #: ../plugins/converter/interface.c:462 -#: ../plugins/converter/converter.glade.h:29 msgid "Method:" msgstr "Método:" @@ -1871,76 +1896,65 @@ msgid "Temporary file" msgstr "Arquivo temporário" #: ../plugins/converter/interface.c:487 -#: ../plugins/converter/converter.glade.h:5 msgid "APEv2" msgstr "APEv2" #: ../plugins/converter/interface.c:493 -#: ../plugins/converter/converter.glade.h:21 msgid "ID3v1" msgstr "ID3v1" #: ../plugins/converter/interface.c:499 -#: ../plugins/converter/converter.glade.h:31 msgid "OggVorbis" msgstr "OggVorbis" #: ../plugins/converter/interface.c:505 -#: ../plugins/converter/converter.glade.h:20 msgid "FLAC" msgstr "FLAC" #: ../plugins/converter/interface.c:517 -#: ../plugins/converter/converter.glade.h:22 msgid "ID3v2" msgstr "ID3v2" #: ../plugins/converter/interface.c:527 -#: ../plugins/converter/converter.glade.h:1 msgid "<b>Tag writer</b>" msgstr "<b>Editor de etiquetas</b>" #: ../plugins/converter/interface.c:614 -#: ../plugins/converter/converter.glade.h:9 msgid "DSP Preset Editor" msgstr "Editor de predefinições do DSP" #: ../plugins/converter/interface.c:637 -#: ../plugins/converter/converter.glade.h:47 msgid "Untitled DSP Preset" msgstr "Predefinição do DSP sem título" -#: ../plugins/converter/converter.glade.h:23 -msgid "" -"Keep source format\n" -"8 bit signed int\n" -"16 bit signed int\n" -"24 bit signed int\n" -"32 bit signed int\n" -"32 bit float" -msgstr "" -"Manter formato original\n" -"Inteiro de 8 bits com sinal\n" -"Inteiro de 16 bits com sinal\n" -"Inteiro de 24 bits com sinal\n" -"Inteiro de 32 bits com sinal\n" -"32 bits flutuante" - -#: ../plugins/converter/converter.glade.h:36 -msgid "" -"Pipe\n" -"Temporary file" -msgstr "" -"Pipe\n" -"Arquivo temporário" +#~ msgid "" +#~ "Keep source format\n" +#~ "8 bit signed int\n" +#~ "16 bit signed int\n" +#~ "24 bit signed int\n" +#~ "32 bit signed int\n" +#~ "32 bit float" +#~ msgstr "" +#~ "Manter formato original\n" +#~ "Inteiro de 8 bits com sinal\n" +#~ "Inteiro de 16 bits com sinal\n" +#~ "Inteiro de 24 bits com sinal\n" +#~ "Inteiro de 32 bits com sinal\n" +#~ "32 bits flutuante" -#: ../plugins/converter/converter.glade.h:41 -msgid "" -"Prompt\n" -"Overwrite" -msgstr "" -"Perguntar\n" -"Sobrescrever" +#~ msgid "" +#~ "Pipe\n" +#~ "Temporary file" +#~ msgstr "" +#~ "Pipe\n" +#~ "Arquivo temporário" + +#~ msgid "" +#~ "Prompt\n" +#~ "Overwrite" +#~ msgstr "" +#~ "Perguntar\n" +#~ "Sobrescrever" #~ msgid "about.txt" #~ msgstr "about.txt" @@ -2032,21 +2046,6 @@ msgstr "" #~ msgid "ALSA output plugin" #~ msgstr "Plugin ALSA" -#~ msgid "Location" -#~ msgstr "Local" - -#~ msgid "Subtrack Index" -#~ msgstr "Índice de subfaixas" - -#~ msgid "Tag Type(s)" -#~ msgstr "Tipo(s) de etiqueta" - -#~ msgid "Embedded Cuesheet" -#~ msgstr "Cuesheet embutida" - -#~ msgid "Codec" -#~ msgstr "Codec" - #~ msgid "DeaDBeeF now playing" #~ msgstr "O DeaDBeeF está reproduzindo" @@ -1689,7 +1689,7 @@ msgstr "Заменить" #: ../plugins/converter/interface.c:230 msgid "Preserve folder structure, starting from:" -msgstr "" +msgstr "Сохранить структуру папок, начиная с:" #: ../plugins/converter/interface.c:386 msgid "Edit Encoder Preset" diff --git a/po/te.po b/po/te.po new file mode 100644 index 00000000..74f470a2 --- /dev/null +++ b/po/te.po @@ -0,0 +1,1166 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-09-10 15:02+0200\n" +"PO-Revision-Date: 2011-04-25 17:20+0200\n" +"Last-Translator: PraveenIlla <mail2ipn@gmail.com>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: te\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" +"X-Generator: Pootle 2.0.5\n" + +#: ../plugins/gtkui/callbacks.c:97 +msgid "Supported sound formats" +msgstr "సహకారంవున్న శబ్ధపు ఫార్మేట్లు" + +#: ../plugins/gtkui/callbacks.c:108 +msgid "Other files (*)" +msgstr "ఇతర ఫైళ్ళు (*)" + +#: ../plugins/gtkui/callbacks.c:118 +msgid "Open file(s)..." +msgstr "ఫైళ్ళ(ను) తెరువు..." + +#: ../plugins/gtkui/callbacks.c:151 +msgid "Add file(s) to playlist..." +msgstr "పాటలజాబితాకు ఫైళ్ళ(ను) జతచేయి..." + +#: ../plugins/gtkui/callbacks.c:190 +msgid "Add folder(s) to playlist..." +msgstr "సంచయా(ల)ను పాటలజాబితాకు జతచేయి..." + +#: ../plugins/gtkui/callbacks.c:192 +msgid "Follow symlinks" +msgstr "symlinks అనుసరించు" + +#: ../plugins/gtkui/callbacks.c:677 +msgid "Failed while reading help file" +msgstr "సహాయక ఫైలును చదువుతుండగా విఫలమైంది" + +#: ../plugins/gtkui/callbacks.c:687 +msgid "Failed to load help file" +msgstr "సహాయక ఫైల్ లోడుచేయుటలో విఫలమైంది" + +#: ../plugins/gtkui/callbacks.c:701 ../plugins/gtkui/interface.c:1090 +#: ../plugins/gtkui/deadbeef.glade.h:65 +msgid "Help" +msgstr "సహాయం" + +#: ../plugins/gtkui/callbacks.c:711 +#, c-format +msgid "About DeaDBeeF %s" +msgstr "డెడ్బీఫ్ %s గురించి" + +#: ../plugins/gtkui/callbacks.c:722 +#, c-format +msgid "DeaDBeeF %s ChangeLog" +msgstr "డెడ్బీఫ్ %s మార్పుచిట్టా" + +#: ../plugins/gtkui/ddbtabstrip.c:527 +msgid "Edit playlist" +msgstr "పాటలజాబితాను సవరించు" + +#: ../plugins/gtkui/ddbtabstrip.c:604 +msgid "Rename Playlist" +msgstr "పాటలజాబితా పేరుమార్చు" + +#: ../plugins/gtkui/ddbtabstrip.c:608 +msgid "Remove Playlist" +msgstr "పాటలజాబితాను తొలగించు" + +#: ../plugins/gtkui/ddbtabstrip.c:612 +msgid "Add New Playlist" +msgstr "కొత్త పాటలజాబితాను జతచేయి" + +#: ../plugins/gtkui/eq.c:113 +msgid "Save DeaDBeeF EQ Preset" +msgstr "డెడ్బీఫ్ EQ ప్రిసెట్ భద్రపరుచు" + +#: ../plugins/gtkui/eq.c:120 +msgid "DeaDBeeF EQ preset files (*.ddbeq)" +msgstr "డెడ్బీఫ్ EQ ప్రిసెట్ ఫైళ్ళు (*.ddbeq)" + +#: ../plugins/gtkui/eq.c:151 +msgid "Load DeaDBeeF EQ Preset..." +msgstr "డెడ్బీఫ్ EQ ప్రిసెట్ లోడుచేయి..." + +#: ../plugins/gtkui/eq.c:155 +msgid "DeaDBeeF EQ presets (*.ddbeq)" +msgstr "డెడ్బీఫ్ EQ ప్రిసెట్ (*.ddbeq)" + +#: ../plugins/gtkui/eq.c:214 +msgid "Import Foobar2000 EQ Preset..." +msgstr "Foobar2000 EQ ప్రిసెట్ దిగుమతిచేయి..." + +#: ../plugins/gtkui/eq.c:218 +msgid "Foobar2000 EQ presets (*.feq)" +msgstr "Foobar2000 EQ ప్రిసెట్ (*.feq)" + +#: ../plugins/gtkui/eq.c:292 +msgid "Enable" +msgstr "చేతనపరుచు" + +#: ../plugins/gtkui/eq.c:300 +msgid "Zero All" +msgstr "అన్నీ సున్నాచేయి" + +#: ../plugins/gtkui/eq.c:307 +msgid "Zero Preamp" +msgstr "ప్రిఆంప్ సున్నాచేయి" + +#: ../plugins/gtkui/eq.c:314 +msgid "Zero Bands" +msgstr "బ్రాండ్లను సున్నాచేయి" + +#: ../plugins/gtkui/eq.c:321 +msgid "Save Preset" +msgstr "ప్రిసెట్ భద్రపరుచు" + +#: ../plugins/gtkui/eq.c:328 +msgid "Load Preset" +msgstr "ప్రిసెట్ లోడుచేయి" + +#: ../plugins/gtkui/eq.c:335 +msgid "Import Foobar2000 Preset" +msgstr "Foobar2000 EQ ప్రిసెట్ దిగుమతిచేయి" + +#: ../plugins/gtkui/gtkui.c:133 +#, c-format +msgid "1 day %d:%02d:%02d" +msgstr "1 రోజు %d:%02d:%02d" + +#: ../plugins/gtkui/gtkui.c:136 +#, c-format +msgid "%d days %d:%02d:%02d" +msgstr "%d రోజులు %d:%02d:%02d" + +#: ../plugins/gtkui/gtkui.c:145 +#, c-format +msgid "Stopped | %d tracks | %s total playtime" +msgstr "ఆపివేయబడింది | %d ట్రాక్లు | %s మొత్తం ప్లేటైమ్" + +#: ../plugins/gtkui/gtkui.c:158 +msgid "Mono" +msgstr "మోనో" + +#: ../plugins/gtkui/gtkui.c:158 +msgid "Stereo" +msgstr "స్టీరియో" + +#: ../plugins/gtkui/gtkui.c:183 +#, c-format +msgid "| %4d kbps " +msgstr "| %4d kbps " + +#: ../plugins/gtkui/gtkui.c:189 +msgid "Paused | " +msgstr "నిలిపివేయబడింది | " + +#: ../plugins/gtkui/gtkui.c:190 +#, c-format +msgid "" +"%s%s %s| %dHz | %d bit | %s | %d:%02d / %s | %d tracks | %s total playtime" +msgstr "" +"%s%s %s| %dHz | %d బిట్ | %s | %d:%02d / %s | %d ట్రాక్లు | %s మొత్తం " +"ప్లేటైమ్" + +#: ../plugins/gtkui/gtkui.c:660 +msgid "Save Playlist As" +msgstr "పాటలజాబితాను ఇలా దాచు" + +#: ../plugins/gtkui/gtkui.c:669 ../plugins/gtkui/gtkui.c:730 +msgid "DeaDBeeF playlist files (*.dbpl)" +msgstr "డెడ్బీఫ్ పాటలజాబితా ఫైళ్ళు (*.dbpl)" + +#: ../plugins/gtkui/gtkui.c:723 +msgid "Load Playlist" +msgstr "పాటలజాబితాను నింపు" + +#: ../plugins/gtkui/gtkui.c:863 +msgid "New Playlist" +msgstr "కొత్త పాటలజాబితా" + +#: ../plugins/gtkui/gtkui.c:866 +#, c-format +msgid "New Playlist (%d)" +msgstr "కొత్త పాటలజాబితా (%d)" + +#: ../plugins/gtkui/interface.c:138 ../plugins/gtkui/deadbeef.glade.h:153 +msgid "_File" +msgstr "ఫైల్ (_F)" + +#: ../plugins/gtkui/interface.c:145 ../plugins/gtkui/deadbeef.glade.h:157 +msgid "_Open file(s)" +msgstr "ఫైళ్ళ(ను) తెరువు (_O)" + +#: ../plugins/gtkui/interface.c:161 ../plugins/gtkui/deadbeef.glade.h:6 +msgid "Add file(s)" +msgstr "ఫైళ్ళ(ను) జతచేయి" + +#: ../plugins/gtkui/interface.c:169 ../plugins/gtkui/deadbeef.glade.h:8 +msgid "Add folder(s)" +msgstr "సంచయా(ల)ను జతచేయి" + +#: ../plugins/gtkui/interface.c:177 ../plugins/gtkui/interface.c:2969 +#: ../plugins/gtkui/deadbeef.glade.h:9 +msgid "Add location" +msgstr "స్థానమును జతచేయి" + +#: ../plugins/gtkui/interface.c:186 ../plugins/gtkui/deadbeef.glade.h:83 +msgid "New playlist" +msgstr "కొత్త పాటలజాబితా" + +#: ../plugins/gtkui/interface.c:193 ../plugins/gtkui/deadbeef.glade.h:75 +msgid "Load playlist" +msgstr "పాటలజాబితాను నింపు" + +#: ../plugins/gtkui/interface.c:197 ../plugins/gtkui/deadbeef.glade.h:112 +msgid "Save playlist" +msgstr "పాటలజాబితాను దాచు" + +#: ../plugins/gtkui/interface.c:201 ../plugins/gtkui/deadbeef.glade.h:113 +msgid "Save playlist as" +msgstr "పాటలజాబితాను ఇలా దాచు" + +#: ../plugins/gtkui/interface.c:210 ../plugins/gtkui/deadbeef.glade.h:159 +msgid "_Quit" +msgstr "నిష్క్రమించు (_Q)" + +#: ../plugins/gtkui/interface.c:221 ../plugins/gtkui/deadbeef.glade.h:152 +msgid "_Edit" +msgstr "సవరించు(_E)" + +#: ../plugins/gtkui/interface.c:228 ../plugins/gtkui/deadbeef.glade.h:150 +msgid "_Clear" +msgstr "శుభ్రంచేయి (_C)" + +#: ../plugins/gtkui/interface.c:236 ../plugins/gtkui/deadbeef.glade.h:117 +msgid "Select all" +msgstr "అన్నీ ఎంచుకో" + +#: ../plugins/gtkui/interface.c:243 ../plugins/gtkui/deadbeef.glade.h:25 +msgid "Deselect all" +msgstr "ఎంపికను రద్దుచేయి" + +#: ../plugins/gtkui/interface.c:250 ../plugins/gtkui/deadbeef.glade.h:70 +msgid "Invert selection" +msgstr "ఎంపికను తారుమారుచేయి" + +#: ../plugins/gtkui/interface.c:254 ../plugins/gtkui/deadbeef.glade.h:120 +msgid "Selection" +msgstr "ఎంపిక" + +#: ../plugins/gtkui/interface.c:261 ../plugins/gtkui/plcommon.c:425 +#: ../plugins/gtkui/prefwin.c:317 ../plugins/gtkui/deadbeef.glade.h:107 +msgid "Remove" +msgstr "తొలగించు" + +#: ../plugins/gtkui/interface.c:269 ../plugins/gtkui/deadbeef.glade.h:20 +msgid "Crop" +msgstr "కత్తిరించు" + +#: ../plugins/gtkui/interface.c:273 ../plugins/gtkui/deadbeef.glade.h:154 +msgid "_Find" +msgstr "కనుగొను (_F)" + +#: ../plugins/gtkui/interface.c:285 ../plugins/gtkui/interface.c:1705 +#: ../plugins/gtkui/deadbeef.glade.h:97 +msgid "Preferences" +msgstr "ప్రాధాన్యతలు" + +#: ../plugins/gtkui/interface.c:289 ../plugins/gtkui/deadbeef.glade.h:160 +msgid "_View" +msgstr "వీక్షణం (_V)" + +#: ../plugins/gtkui/interface.c:296 ../plugins/gtkui/deadbeef.glade.h:123 +msgid "Status bar" +msgstr "స్థితి పట్టీ" + +#: ../plugins/gtkui/interface.c:300 ../plugins/gtkui/deadbeef.glade.h:18 +msgid "Column headers" +msgstr "నిలువువరుస పీఠికలు" + +#: ../plugins/gtkui/interface.c:304 ../plugins/gtkui/deadbeef.glade.h:130 +msgid "Tabs" +msgstr "ట్యాబ్లు" + +#: ../plugins/gtkui/interface.c:308 ../plugins/gtkui/deadbeef.glade.h:33 +msgid "Equalizer" +msgstr "ఈక్విలైజర్" + +#: ../plugins/gtkui/interface.c:312 ../plugins/gtkui/deadbeef.glade.h:158 +msgid "_Playback" +msgstr "ప్లేబాక్(_P)" + +#: ../plugins/gtkui/interface.c:319 ../plugins/gtkui/deadbeef.glade.h:86 +msgid "Order" +msgstr "క్రమం" + +#: ../plugins/gtkui/interface.c:326 ../plugins/gtkui/deadbeef.glade.h:74 +msgid "Linear" +msgstr "ఒకే వరుసలో ఉన్నవి" + +#: ../plugins/gtkui/interface.c:332 ../plugins/gtkui/deadbeef.glade.h:121 +msgid "Shuffle" +msgstr "యాదృచ్ఛికం" + +#: ../plugins/gtkui/interface.c:338 ../plugins/gtkui/deadbeef.glade.h:106 +msgid "Random" +msgstr "యాదృచ్ఛికం" + +#: ../plugins/gtkui/interface.c:344 ../plugins/gtkui/deadbeef.glade.h:78 +msgid "Looping" +msgstr "" + +#: ../plugins/gtkui/interface.c:351 ../plugins/gtkui/deadbeef.glade.h:76 +msgid "Loop All" +msgstr "" + +#: ../plugins/gtkui/interface.c:357 ../plugins/gtkui/deadbeef.glade.h:77 +msgid "Loop Single Song" +msgstr "" + +#: ../plugins/gtkui/interface.c:363 ../plugins/gtkui/deadbeef.glade.h:29 +msgid "Don't Loop" +msgstr "" + +#: ../plugins/gtkui/interface.c:369 ../plugins/gtkui/deadbeef.glade.h:114 +msgid "Scroll follows playback" +msgstr "" + +#: ../plugins/gtkui/interface.c:374 ../plugins/gtkui/deadbeef.glade.h:22 +msgid "Cursor follows playback" +msgstr "" + +#: ../plugins/gtkui/interface.c:378 ../plugins/gtkui/deadbeef.glade.h:125 +msgid "Stop after current" +msgstr "దీని తరువాత ఆపివేయి" + +#: ../plugins/gtkui/interface.c:385 ../plugins/gtkui/interface.c:392 +#: ../plugins/gtkui/deadbeef.glade.h:155 +msgid "_Help" +msgstr "సహాయం (_H)" + +#: ../plugins/gtkui/interface.c:400 ../plugins/gtkui/deadbeef.glade.h:149 +msgid "_ChangeLog" +msgstr "మార్పుచిట్టా (_C)" + +#: ../plugins/gtkui/interface.c:422 ../plugins/gtkui/deadbeef.glade.h:146 +msgid "_About" +msgstr "గురించి (_A)" + +#: ../plugins/gtkui/interface.c:801 ../plugins/gtkui/deadbeef.glade.h:115 +msgid "Search" +msgstr "వెతుకు" + +#: ../plugins/gtkui/interface.c:876 ../plugins/gtkui/deadbeef.glade.h:124 +msgid "Stop" +msgstr "ఆపు" + +#: ../plugins/gtkui/interface.c:884 ../plugins/gtkui/deadbeef.glade.h:92 +msgid "Play" +msgstr "ప్లే" + +#: ../plugins/gtkui/interface.c:892 ../plugins/gtkui/deadbeef.glade.h:91 +msgid "Pause" +msgstr "నిలిపివేయి" + +#: ../plugins/gtkui/interface.c:900 ../plugins/gtkui/deadbeef.glade.h:98 +msgid "Previous" +msgstr "మునుపటి" + +#: ../plugins/gtkui/interface.c:908 ../plugins/gtkui/deadbeef.glade.h:84 +msgid "Next" +msgstr "తరువాతి" + +#: ../plugins/gtkui/interface.c:916 ../plugins/gtkui/deadbeef.glade.h:93 +msgid "Play Random" +msgstr "యాదృచ్ఛికంగా ప్లేచేయి" + +#: ../plugins/gtkui/interface.c:925 ../plugins/gtkui/deadbeef.glade.h:5 +msgid "About" +msgstr "గురించి" + +#: ../plugins/gtkui/interface.c:938 ../plugins/gtkui/deadbeef.glade.h:105 +msgid "Quit" +msgstr "నిష్క్రమించు" + +#: ../plugins/gtkui/interface.c:1010 ../plugins/gtkui/deadbeef.glade.h:10 +msgid "Adding files..." +msgstr "ఫైళ్ళను జతచేస్తున్నది..." + +#: ../plugins/gtkui/interface.c:1054 ../plugins/gtkui/deadbeef.glade.h:145 +msgid "_Abort" +msgstr "మధ్యలోరద్దు (_A)" + +#: ../plugins/gtkui/interface.c:1155 ../plugins/gtkui/deadbeef.glade.h:136 +msgid "Track Properties" +msgstr "ట్రాక్ లక్షణాలు" + +#: ../plugins/gtkui/interface.c:1179 ../plugins/gtkui/deadbeef.glade.h:3 +msgid "" +"<b>WARNING</b>: tag writing feature is still in development.\n" +"<b>Make backup copies</b> before using." +msgstr "" +"<b>హెచ్చరిక</b>: ట్యాగ్ వ్రాయుట అనే అంశము ఇంకా అభివృద్ధిలోనే ఉన్నది.\n" +"దీనిని వాడేముందు <b>బ్యాక్అప్ కాపీలను తీసుకోండి</b>." + +#: ../plugins/gtkui/interface.c:1206 ../plugins/gtkui/deadbeef.glade.h:147 +msgid "_Apply" +msgstr "అనువర్తించు (_A)" + +#: ../plugins/gtkui/interface.c:1227 ../plugins/gtkui/interface.c:1273 +#: ../plugins/gtkui/interface.c:2497 ../plugins/gtkui/deadbeef.glade.h:151 +msgid "_Close" +msgstr "మూసివేయి (_C)" + +#: ../plugins/gtkui/interface.c:1231 ../plugins/gtkui/deadbeef.glade.h:79 +msgid "Metadata" +msgstr "మెటాడేటా" + +#: ../plugins/gtkui/interface.c:1277 ../plugins/gtkui/plcommon.c:503 +#: ../plugins/gtkui/deadbeef.glade.h:99 +msgid "Properties" +msgstr "గుణములు" + +#: ../plugins/gtkui/interface.c:1363 ../plugins/gtkui/deadbeef.glade.h:161 +msgid "editcolumndlg" +msgstr "" + +#: ../plugins/gtkui/interface.c:1378 ../plugins/gtkui/interface.c:2869 +#: ../plugins/gtkui/deadbeef.glade.h:133 +msgid "Title:" +msgstr "శీర్షిక:" + +#: ../plugins/gtkui/interface.c:1386 ../plugins/gtkui/deadbeef.glade.h:32 +msgid "Enter new column title here" +msgstr "కొత్త నిలువువరుస శీర్షికను ఇక్కడ ప్రవేశపెట్టండి" + +#: ../plugins/gtkui/interface.c:1394 ../plugins/gtkui/deadbeef.glade.h:137 +msgid "Type:" +msgstr "రకం:" + +#: ../plugins/gtkui/interface.c:1402 +msgid "File number" +msgstr "ఫైల్ సంఖ్య" + +#. create default set of columns +#: ../plugins/gtkui/interface.c:1403 ../plugins/gtkui/mainplaylist.c:300 +msgid "Playing" +msgstr "ప్లేచేస్తున్నది" + +#: ../plugins/gtkui/interface.c:1404 +msgid "Album Art" +msgstr "ఆల్బమ్ చిత్రం" + +#: ../plugins/gtkui/interface.c:1405 +msgid "Artist - Album" +msgstr "కళాకారుడు - ఆల్బమ్" + +#: ../plugins/gtkui/interface.c:1406 ../plugins/gtkui/plcommon.c:877 +msgid "Artist" +msgstr "కళాకారుడు" + +#: ../plugins/gtkui/interface.c:1407 ../plugins/gtkui/interface.c:1794 +msgid "Album" +msgstr "ఆల్బమ్" + +#: ../plugins/gtkui/interface.c:1408 ../plugins/gtkui/prefwin.c:595 +msgid "Title" +msgstr "శీర్షిక" + +#: ../plugins/gtkui/interface.c:1409 +msgid "Length" +msgstr "నిడివి" + +#: ../plugins/gtkui/interface.c:1410 ../plugins/gtkui/interface.c:1793 +msgid "Track" +msgstr "ట్రాక్" + +#: ../plugins/gtkui/interface.c:1411 +msgid "Band / Album Artist" +msgstr "బ్యాండ్ / ఆల్బమ్ కళాకారుడు" + +#: ../plugins/gtkui/interface.c:1412 ../plugins/gtkui/plcommon.c:881 +msgid "Custom" +msgstr "" + +#: ../plugins/gtkui/interface.c:1418 ../plugins/gtkui/interface.c:3096 +#: ../plugins/gtkui/deadbeef.glade.h:62 +msgid "Format:" +msgstr "ఫార్మేట్:" + +#: ../plugins/gtkui/interface.c:1433 ../plugins/gtkui/deadbeef.glade.h:11 +msgid "Alignment:" +msgstr "అనుగుణం:" + +#: ../plugins/gtkui/interface.c:1441 +msgid "Left" +msgstr "ఎడమ" + +#: ../plugins/gtkui/interface.c:1442 +msgid "Right" +msgstr "కుడి" + +#: ../plugins/gtkui/interface.c:1444 ../plugins/gtkui/deadbeef.glade.h:48 +#, no-c-format +msgid "" +"Format conversions (start with %):\n" +" [a]rtist, [t]itle, al[b]um, [B]and, [C]omposer\n" +" track[n]umber, [N]totaltracks,\n" +" [l]ength, [y]ear, [g]enre, [c]omment,\n" +" copy[r]ight, [f]ilename, [F]ullPathname, [T]ags,\n" +" [d]irectory, [D]irectoryWithPath\n" +"Example: %a - %t [%l]" +msgstr "" + +#: ../plugins/gtkui/interface.c:1473 ../plugins/gtkui/interface.c:2900 +#: ../plugins/gtkui/interface.c:3012 ../plugins/gtkui/interface.c:3135 +#: ../plugins/gtkui/deadbeef.glade.h:148 +msgid "_Cancel" +msgstr "రద్దుచేయి (_C)" + +#: ../plugins/gtkui/interface.c:1494 ../plugins/gtkui/interface.c:2921 +#: ../plugins/gtkui/interface.c:3033 ../plugins/gtkui/interface.c:3156 +#: ../plugins/gtkui/deadbeef.glade.h:156 +msgid "_OK" +msgstr "సరే (_O)" + +#: ../plugins/gtkui/interface.c:1725 ../plugins/gtkui/deadbeef.glade.h:88 +msgid "Output plugin:" +msgstr "అవుట్పుట్ ప్లగిన్:" + +#: ../plugins/gtkui/interface.c:1738 ../plugins/gtkui/deadbeef.glade.h:87 +msgid "Output device:" +msgstr "అవుట్పుట్ పరికరం:" + +#: ../plugins/gtkui/interface.c:1747 ../plugins/gtkui/deadbeef.glade.h:122 +msgid "Sound" +msgstr "ధ్వని" + +#: ../plugins/gtkui/interface.c:1756 ../plugins/gtkui/deadbeef.glade.h:12 +msgid "Allow dynamic samplerate switching" +msgstr "" + +#: ../plugins/gtkui/interface.c:1764 ../plugins/gtkui/deadbeef.glade.h:111 +msgid "Samplerate conversion quality:" +msgstr "" + +#: ../plugins/gtkui/interface.c:1783 ../plugins/gtkui/deadbeef.glade.h:108 +msgid "Replaygain mode:" +msgstr "" + +#: ../plugins/gtkui/interface.c:1792 +msgid "Disable" +msgstr "అచేతనంచేయి" + +#: ../plugins/gtkui/interface.c:1796 ../plugins/gtkui/deadbeef.glade.h:109 +msgid "Replaygain peak scale" +msgstr "" + +#: ../plugins/gtkui/interface.c:1804 ../plugins/gtkui/deadbeef.glade.h:7 +msgid "Add files from command line (or file manager) to this playlist:" +msgstr "ఆదేశ వరుస (లేదా ఫైల్ నిర్వాహకము) నుండి ఫైళ్ళను ఈ పాటలజాబితాకు జతచేయి" + +#: ../plugins/gtkui/interface.c:1813 ../plugins/gtkui/deadbeef.glade.h:110 +msgid "Resume previous session on startup" +msgstr "ప్రారంభములో మునుపటి కొనసాగిన కాలాన్ని పునఃప్రారంభించు" + +#: ../plugins/gtkui/interface.c:1817 ../plugins/gtkui/deadbeef.glade.h:94 +msgid "Playback" +msgstr "ప్లేబాక్" + +#: ../plugins/gtkui/interface.c:1826 ../plugins/gtkui/deadbeef.glade.h:16 +msgid "Close minimizes to tray" +msgstr "" + +#: ../plugins/gtkui/interface.c:1830 ../plugins/gtkui/deadbeef.glade.h:81 +msgid "Middle mouse button closes playlist" +msgstr "" + +#: ../plugins/gtkui/interface.c:1834 ../plugins/gtkui/deadbeef.glade.h:67 +msgid "Hide system tray icon" +msgstr "" + +#: ../plugins/gtkui/interface.c:1838 ../plugins/gtkui/deadbeef.glade.h:139 +msgid "Use bold font for currently playing track" +msgstr "" + +#: ../plugins/gtkui/interface.c:1842 ../plugins/gtkui/deadbeef.glade.h:66 +msgid "Hide \"Delete from disk\" context menu item" +msgstr "" + +#: ../plugins/gtkui/interface.c:1850 ../plugins/gtkui/deadbeef.glade.h:134 +msgid "Titlebar text while playing:" +msgstr "" + +#: ../plugins/gtkui/interface.c:1864 ../plugins/gtkui/deadbeef.glade.h:135 +msgid "Titlebar text while stopped:" +msgstr "" + +#: ../plugins/gtkui/interface.c:1874 ../plugins/gtkui/deadbeef.glade.h:63 +msgid "GUI" +msgstr "GUI" + +#: ../plugins/gtkui/interface.c:1888 ../plugins/gtkui/interface.c:1932 +#: ../plugins/gtkui/deadbeef.glade.h:89 +msgid "Override" +msgstr "తిరస్కరించు" + +#: ../plugins/gtkui/interface.c:1897 ../plugins/gtkui/deadbeef.glade.h:46 +msgid "Foreground" +msgstr "ముందుభాగము" + +#: ../plugins/gtkui/interface.c:1904 ../plugins/gtkui/deadbeef.glade.h:14 +msgid "Background" +msgstr "నేపథ్యం" + +#: ../plugins/gtkui/interface.c:1923 ../plugins/gtkui/deadbeef.glade.h:116 +msgid "Seekbar/Volumebar colors" +msgstr "" + +#: ../plugins/gtkui/interface.c:1941 ../plugins/gtkui/deadbeef.glade.h:80 +msgid "Middle" +msgstr "" + +#: ../plugins/gtkui/interface.c:1948 ../plugins/gtkui/deadbeef.glade.h:73 +msgid "Light" +msgstr "" + +#: ../plugins/gtkui/interface.c:1955 ../plugins/gtkui/deadbeef.glade.h:23 +msgid "Dark" +msgstr "" + +#: ../plugins/gtkui/interface.c:1986 ../plugins/gtkui/deadbeef.glade.h:15 +msgid "Base" +msgstr "" + +#: ../plugins/gtkui/interface.c:1993 ../plugins/gtkui/deadbeef.glade.h:129 +msgid "Tab strip colors" +msgstr "" + +#: ../plugins/gtkui/interface.c:2002 ../plugins/gtkui/deadbeef.glade.h:90 +msgid "Override (looses GTK treeview theming, but speeds up rendering)" +msgstr "" + +#: ../plugins/gtkui/interface.c:2011 ../plugins/gtkui/deadbeef.glade.h:34 +msgid "Even row" +msgstr "" + +#: ../plugins/gtkui/interface.c:2018 ../plugins/gtkui/deadbeef.glade.h:85 +msgid "Odd row" +msgstr "" + +#: ../plugins/gtkui/interface.c:2037 ../plugins/gtkui/deadbeef.glade.h:132 +msgid "Text" +msgstr "పాఠ్యం" + +#: ../plugins/gtkui/interface.c:2044 ../plugins/gtkui/deadbeef.glade.h:118 +msgid "Selected row" +msgstr "ఎంచుకున్న అడ్డవరుస" + +#: ../plugins/gtkui/interface.c:2063 ../plugins/gtkui/deadbeef.glade.h:119 +msgid "Selected text" +msgstr "ఎంచుకున్న పాఠ్యం" + +#: ../plugins/gtkui/interface.c:2076 ../plugins/gtkui/deadbeef.glade.h:21 +msgid "Cursor" +msgstr "కర్సరు" + +#: ../plugins/gtkui/interface.c:2089 ../plugins/gtkui/deadbeef.glade.h:95 +msgid "Playlist colors" +msgstr "పాటలజాబితా రంగులు" + +#: ../plugins/gtkui/interface.c:2093 ../plugins/gtkui/deadbeef.glade.h:17 +msgid "Colors" +msgstr "రంగులు" + +#: ../plugins/gtkui/interface.c:2102 ../plugins/gtkui/deadbeef.glade.h:31 +msgid "Enable Proxy Server" +msgstr "ప్రోక్సీ సేవికను చేతనపరుచు" + +#: ../plugins/gtkui/interface.c:2110 ../plugins/gtkui/deadbeef.glade.h:101 +msgid "Proxy Server Address:" +msgstr "ప్రోక్సీ సేవిక చిరునామా:" + +#: ../plugins/gtkui/interface.c:2124 ../plugins/gtkui/deadbeef.glade.h:102 +msgid "Proxy Server Port:" +msgstr "ప్రోక్సీ సేవిక పోర్టు:" + +#: ../plugins/gtkui/interface.c:2138 ../plugins/gtkui/deadbeef.glade.h:103 +msgid "Proxy Type:" +msgstr "ప్రోక్సీ రకం:" + +#: ../plugins/gtkui/interface.c:2157 ../plugins/gtkui/deadbeef.glade.h:104 +msgid "Proxy Username:" +msgstr "ప్రోక్సీ వాడుకరిపేరు:" + +#: ../plugins/gtkui/interface.c:2170 ../plugins/gtkui/deadbeef.glade.h:100 +msgid "Proxy Password:" +msgstr "ప్రోక్సీ సంకేతపదం:" + +#: ../plugins/gtkui/interface.c:2180 ../plugins/gtkui/deadbeef.glade.h:82 +msgid "Network" +msgstr "నెట్వర్క్" + +#: ../plugins/gtkui/interface.c:2208 ../plugins/gtkui/deadbeef.glade.h:143 +msgid "Write ID3v2" +msgstr "ID3v2 వ్రాయి" + +#: ../plugins/gtkui/interface.c:2212 ../plugins/gtkui/interface.c:2339 +#: ../plugins/gtkui/deadbeef.glade.h:142 +msgid "Write ID3v1" +msgstr "ID3v1 వ్రాయి" + +#: ../plugins/gtkui/interface.c:2216 ../plugins/gtkui/interface.c:2295 +#: ../plugins/gtkui/interface.c:2335 ../plugins/gtkui/deadbeef.glade.h:141 +msgid "Write APEv2" +msgstr "APEv2 వ్రాయి" + +#: ../plugins/gtkui/interface.c:2224 ../plugins/gtkui/interface.c:2303 +#: ../plugins/gtkui/deadbeef.glade.h:128 +msgid "Strip ID3v2" +msgstr "" + +#: ../plugins/gtkui/interface.c:2228 ../plugins/gtkui/interface.c:2351 +#: ../plugins/gtkui/deadbeef.glade.h:127 +msgid "Strip ID3v1" +msgstr "" + +#: ../plugins/gtkui/interface.c:2232 ../plugins/gtkui/interface.c:2307 +#: ../plugins/gtkui/interface.c:2347 ../plugins/gtkui/deadbeef.glade.h:126 +msgid "Strip APEv2" +msgstr "" + +#: ../plugins/gtkui/interface.c:2240 ../plugins/gtkui/deadbeef.glade.h:69 +msgid "ID3v2 version" +msgstr "ID3v2 వర్షన్" + +#: ../plugins/gtkui/interface.c:2247 +msgid "2.3 (Recommended)" +msgstr "2.3 (సిఫారసుచేయబడింది)" + +#: ../plugins/gtkui/interface.c:2248 +msgid "2.4" +msgstr "2.4" + +#: ../plugins/gtkui/interface.c:2254 ../plugins/gtkui/deadbeef.glade.h:68 +msgid "ID3v1 character encoding (default is iso8859-1)" +msgstr "ID3v1 అక్షరపు ఎన్కోడింగ్ (iso8859-1 అనేది అప్రమేయము)" + +#: ../plugins/gtkui/interface.c:2291 ../plugins/gtkui/deadbeef.glade.h:144 +msgid "Write ID3v2.4" +msgstr "ID3v2.4 వ్రాయి" + +#: ../plugins/gtkui/interface.c:2360 ../plugins/gtkui/deadbeef.glade.h:131 +msgid "Tag writer" +msgstr "ట్యాగ్ వ్రైటర్" + +#: ../plugins/gtkui/interface.c:2391 ../plugins/gtkui/deadbeef.glade.h:24 +msgid "Description:" +msgstr "వివరణ:" + +#: ../plugins/gtkui/interface.c:2406 ../plugins/gtkui/deadbeef.glade.h:13 +msgid "Author(s):" +msgstr "మూలకర్త(లు):" + +#: ../plugins/gtkui/interface.c:2421 ../plugins/gtkui/deadbeef.glade.h:30 +msgid "Email:" +msgstr "ఇమెయిల్:" + +#: ../plugins/gtkui/interface.c:2436 ../plugins/gtkui/deadbeef.glade.h:140 +msgid "Website:" +msgstr "వెబ్సైట్:" + +#: ../plugins/gtkui/interface.c:2467 ../plugins/gtkui/deadbeef.glade.h:19 +msgid "Configure" +msgstr "స్వరూపించు" + +#: ../plugins/gtkui/interface.c:2471 ../plugins/gtkui/deadbeef.glade.h:96 +msgid "Plugins" +msgstr "ప్లగిన్లు" + +#: ../plugins/gtkui/interface.c:2853 ../plugins/gtkui/deadbeef.glade.h:162 +msgid "editplaylistdlg" +msgstr "" + +#: ../plugins/gtkui/interface.c:2980 ../plugins/gtkui/deadbeef.glade.h:138 +msgid "URL:" +msgstr "URL:" + +#: ../plugins/gtkui/interface.c:3081 ../plugins/gtkui/deadbeef.glade.h:64 +msgid "Group By" +msgstr "" + +#: ../plugins/gtkui/interface.c:3106 ../plugins/gtkui/deadbeef.glade.h:56 +#, no-c-format +msgid "" +"Format conversions (start with %):\n" +" [a]rtist, [t]itle, al[b]um, [B]and, [C]omposer\n" +" track[n]umber, [N]totaltracks,\n" +" [l]ength, [y]ear, [g]enre, [c]omment,\n" +" copy[r]ight, [f]ilename, [T]ags\n" +"Example: %a - %t [%l]" +msgstr "" + +#: ../plugins/gtkui/mainplaylist.c:301 ../plugins/gtkui/search.c:434 +msgid "Artist / Album" +msgstr "కళాకారుడు / ఆల్బమ్" + +#: ../plugins/gtkui/mainplaylist.c:302 ../plugins/gtkui/search.c:435 +msgid "Track No" +msgstr "ట్రాక్ సంఖ్య" + +#: ../plugins/gtkui/mainplaylist.c:303 ../plugins/gtkui/search.c:436 +msgid "Title / Track Artist" +msgstr "శీర్షిక / ట్రాక్ కళాకారుడు" + +#: ../plugins/gtkui/mainplaylist.c:304 ../plugins/gtkui/search.c:437 +#: ../plugins/gtkui/trkproperties.c:175 +msgid "Duration" +msgstr "నిడివి" + +#: ../plugins/gtkui/plcommon.c:323 +msgid "Delete files from disk" +msgstr "డిస్కు నుండి ఫైళ్ళను తీసివేయి" + +#: ../plugins/gtkui/plcommon.c:324 +msgid "" +"Files will be lost. Proceed?\n" +"(This dialog can be turned off in GTKUI plugin settings)" +msgstr "" +"ఫైళ్ళను కోల్పోతారు. కొనసాగుతారా?\n" +"(ఈ డైలాగును GTKUI ప్లగిన్ అమరికలలోకి వెళ్ళి ఆపివేయవచ్చు)" + +#: ../plugins/gtkui/plcommon.c:325 ../plugins/gtkui/trkproperties.c:56 +msgid "Warning" +msgstr "హెచ్చరిక" + +#: ../plugins/gtkui/plcommon.c:401 +msgid "Add to playback queue" +msgstr "ప్లేబాక్ వరుసకు జతచేయి" + +#: ../plugins/gtkui/plcommon.c:406 +msgid "Remove from playback queue" +msgstr "ప్లేబాక్ వరుస నుండి తొలగించు" + +#: ../plugins/gtkui/plcommon.c:414 +msgid "Reload metadata" +msgstr "మెటాడేటాను మళ్ళీ నింపు" + +#: ../plugins/gtkui/plcommon.c:433 +msgid "Remove from disk" +msgstr "డిస్కు నుండి తొలగించు" + +#: ../plugins/gtkui/plcommon.c:719 ../plugins/gtkui/plcommon.c:844 +msgid "Add column" +msgstr "నిలువువరుసను జతచేయి" + +#: ../plugins/gtkui/plcommon.c:749 ../plugins/gtkui/plcommon.c:848 +msgid "Edit column" +msgstr "నిలువువరుసను సవరించు" + +#: ../plugins/gtkui/plcommon.c:852 +msgid "Remove column" +msgstr "నిలువువరుసను తొలగించు" + +#: ../plugins/gtkui/plcommon.c:862 +msgid "Group by" +msgstr "" + +#: ../plugins/gtkui/plcommon.c:869 +msgid "None" +msgstr "ఏదీకాదు" + +#: ../plugins/gtkui/plcommon.c:873 +msgid "Artist/Date/Album" +msgstr "కళాకారుడు/తేదీ/ఆల్బమ్" + +#: ../plugins/gtkui/pluginconf.c:41 +msgid "Open file..." +msgstr "ఫైల్ తెరువు..." + +#: ../plugins/gtkui/pluginconf.c:142 +#, c-format +msgid "Setup %s" +msgstr "%s అమర్చు" + +#: ../plugins/gtkui/prefwin.c:98 +msgid "Default Audio Device" +msgstr "అప్రమేయ ఆడియా పరికరం" + +#: ../plugins/gtkui/prefwin.c:312 +msgid "Add" +msgstr "జతచేయి" + +#: ../plugins/gtkui/prefwin.c:322 +msgid "Global Hotkeys" +msgstr "సార్వత్రిక హాట్ కీలు" + +#: ../plugins/gtkui/prefwin.c:384 +msgid "Slot" +msgstr "" + +#: ../plugins/gtkui/prefwin.c:385 +msgid "Key combination" +msgstr "కీ కాంబినేషన్" + +#. output plugin selection +#: ../plugins/gtkui/prefwin.c:464 ../plugins/gtkui/prefwin.c:676 +#: ../plugins.c:872 +msgid "ALSA output plugin" +msgstr "ALSA అవుట్పుట్ ప్లగిన్" + +#: ../plugins/gtkui/progress.c:64 +msgid "Initializing..." +msgstr "ఆరంభిస్తున్నది..." + +#: ../plugins/gtkui/trkproperties.c:53 +msgid "You've modified data for this track." +msgstr "ఈ ట్రాక్ డేటాను మీరు సవరించారు." + +#: ../plugins/gtkui/trkproperties.c:55 +msgid "Really close the window?" +msgstr "నిజంగానే విండో మూసివేయాలా?" + +#: ../plugins/gtkui/trkproperties.c:178 +msgid "Tag Type(s)" +msgstr "ట్యాగ్ రకము(లు)" + +#: ../plugins/gtkui/trkproperties.c:180 +msgid "Embedded Cuesheet" +msgstr "" + +#: ../plugins/gtkui/trkproperties.c:180 +msgid "Yes" +msgstr "అవును" + +#: ../plugins/gtkui/trkproperties.c:180 +msgid "No" +msgstr "కాదు" + +#: ../plugins/gtkui/trkproperties.c:182 +msgid "Codec" +msgstr "కొడెక్" + +#: ../plugins/gtkui/trkproperties.c:250 ../plugins/gtkui/trkproperties.c:262 +msgid "Key" +msgstr "కీ" + +#: ../plugins/gtkui/trkproperties.c:251 ../plugins/gtkui/trkproperties.c:263 +msgid "Value" +msgstr "విలువ" + +#: ../plugins/notify/notify.c:138 +msgid "DeaDBeeF now playing" +msgstr "డెడ్బీఫ్ ఇప్పుడు ఆడిస్తున్నది" + +#: ../main.c:89 +#, c-format +msgid "Usage: deadbeef [options] [file(s)]\n" +msgstr "వాడుక: deadbeef [options] [file(s)]\n" + +#: ../main.c:90 +#, c-format +msgid "Options:\n" +msgstr "ఐచ్ఛికాలు:\n" + +#: ../main.c:91 +#, c-format +msgid " --help or -h Print help (this message) and exit\n" +msgstr " --help or -h సహాయాన్ని ముద్రించు (ఈ సందేశమును) మరియు నిష్క్రమించు\n" + +#: ../main.c:92 +#, c-format +msgid " --quit Quit player\n" +msgstr " --quit ప్లేయర్ నుండి నిష్క్రమిస్తుంది\n" + +#: ../main.c:93 +#, c-format +msgid " --version Print version info and exit\n" +msgstr " --version వర్షన్ సమాచారాన్ని ముద్రించి, నిష్క్రమించు\n" + +#: ../main.c:94 +#, c-format +msgid " --play Start playback\n" +msgstr " --play ప్లేబాక్ ప్రారంభించు\n" + +#: ../main.c:95 +#, c-format +msgid " --stop Stop playback\n" +msgstr " --stop ప్లేబాక్ ఆపుము\n" + +#: ../main.c:96 +#, c-format +msgid " --pause Pause playback\n" +msgstr " --pause ప్లేబాక్ నిలిపివేయి\n" + +#: ../main.c:97 +#, c-format +msgid " --next Next song in playlist\n" +msgstr " --next పాటలజాబితాలో తదుపరి పాట\n" + +#: ../main.c:98 +#, c-format +msgid " --prev Previous song in playlist\n" +msgstr " --prev పాటలజాబితాలో మునుపటి పాట\n" + +#: ../main.c:99 +#, c-format +msgid " --random Random song in playlist\n" +msgstr " --random పాటల జాబితాలో యాదృచ్ఛిక పాట\n" + +#: ../main.c:100 +#, c-format +msgid " --queue Append file(s) to existing playlist\n" +msgstr " --queue ఉన్నటువంటి పాటలజాబితాకు ఫైళ్ళను జతచేయి\n" + +#: ../main.c:101 +#, c-format +msgid " --nowplaying FMT Print formatted track name to stdout\n" +msgstr "" + +#: ../main.c:102 +#, c-format +msgid "" +" FMT %%-syntax: [a]rtist, [t]itle, al[b]um,\n" +" [l]ength, track[n]umber, [y]ear, [c]omment,\n" +" copy[r]ight, [e]lapsed\n" +msgstr "" + +#: ../main.c:105 +#, c-format +msgid "" +" e.g.: --nowplaying \"%%a - %%t\" should print \"artist " +"- title\"\n" +msgstr "" + +#: ../playlist.c:377 ../playlist.c:2289 +msgid "Default" +msgstr "అప్రమేయం" + +#: ../plugins/gtkui/deadbeef.glade.h:1 +msgid "" +"2.3 (Recommended)\n" +"2.4" +msgstr "" +"2.3 (సిఫారసుచేయబడింది)\n" +"2.4" + +#: ../plugins/gtkui/deadbeef.glade.h:26 +msgid "" +"Disable\n" +"Track\n" +"Album" +msgstr "" +"అచేతనపరుచు\n" +"ట్రాక్\n" +"ఆల్బమ్" + +#: ../plugins/gtkui/deadbeef.glade.h:35 +msgid "" +"File number\n" +"Playing\n" +"Album Art\n" +"Artist - Album\n" +"Artist\n" +"Album\n" +"Title\n" +"Length\n" +"Track\n" +"Band / Album Artist\n" +"Custom" +msgstr "" +"ఫైల్ సంఖ్య\n" +"ఆడుతున్నది\n" +"ఆల్బమ్ ముఖచిత్రం\n" +"కళాకారుడు - ఆల్బమ్\n" +"కళాకారుడు\n" +"ఆల్బమ్\n" +"శీర్షిక\n" +"పొడవు\n" +"ట్రాక్\n" +"బ్యాండ్ / ఆల్బమ్ కళాకారుడు\n" +"అనురూపితం" + +#: ../plugins/gtkui/deadbeef.glade.h:71 +msgid "" +"Left\n" +"Right" +msgstr "" +"ఎడమ\n" +"కుడి" + +#: ../plugins/gtkui/support.c:90 ../plugins/gtkui/support.c:114 +#, c-format +msgid "Couldn't find pixmap file: %s" +msgstr "" + +#: ../plugins/vorbis/vcedit.c:129 ../plugins/vorbis/vcedit.c:155 +msgid "Couldn't get enough memory for input buffering." +msgstr "ఇన్పుట్ బఫరింగ్ కొరకు సరితగిన మెమోరీ పొందలేదు." + +#: ../plugins/vorbis/vcedit.c:179 ../plugins/vorbis/vcedit.c:550 +msgid "Error reading first page of Ogg bitstream." +msgstr "Ogg బిట్స్ట్రీమ్ యొక్క మెదట పేజీని చదువుటలో దోషము." + +#: ../plugins/vorbis/vcedit.c:185 ../plugins/vorbis/vcedit.c:557 +msgid "Error reading initial header packet." +msgstr "" + +#: ../plugins/vorbis/vcedit.c:237 +msgid "Couldn't get enough memory to register new stream serial number." +msgstr "" + +#: ../plugins/vorbis/vcedit.c:505 +msgid "Input truncated or empty." +msgstr "" + +#: ../plugins/vorbis/vcedit.c:507 +msgid "Input is not an Ogg bitstream." +msgstr "ఇన్పుట్ Ogg బిట్స్ట్రీమ్ కాదు" + +#: ../plugins/vorbis/vcedit.c:565 +msgid "Ogg bitstream does not contain Vorbis data." +msgstr "Ogg బిట్స్ట్రీమ్ Vorbis డేటాను కలిగిలేదు." + +#: ../plugins/vorbis/vcedit.c:578 +msgid "EOF before recognised stream." +msgstr "" + +#: ../plugins/vorbis/vcedit.c:594 +msgid "Ogg bitstream does not contain a supported data-type." +msgstr "" + +#: ../plugins/vorbis/vcedit.c:638 +msgid "Corrupt secondary header." +msgstr "" + +#: ../plugins/vorbis/vcedit.c:659 +msgid "EOF before end of Vorbis headers." +msgstr "" + +#: ../plugins/vorbis/vcedit.c:834 +msgid "Corrupt or missing data, continuing..." +msgstr "పాడైన లేక తప్పిపోయిన డేటా వుండవచ్చు, కొనసాగుతుంది..." + +#: ../plugins/vorbis/vcedit.c:874 +msgid "" +"Error writing stream to output. Output stream may be corrupted or truncated." +msgstr "" + +#: ../plugins/wildmidi/wildmidiplug.c:162 +#, c-format +msgid "" +"wildmidi: freepats config file not found. Please install timidity-freepats " +"package, or specify path to freepats.cfg in the plugin settings." +msgstr "" diff --git a/scripts/portable_package_static.sh b/scripts/portable_package_static.sh index 129000b2..be8c75b6 100755 --- a/scripts/portable_package_static.sh +++ b/scripts/portable_package_static.sh @@ -54,7 +54,6 @@ tar jcvf ../portable_out/build/deadbeef-$VERSION-static-i686.tar.bz2\ $PLUGDIR/dumb.so\ $PLUGDIR/converter.so\ $PLUGDIR/converter_gtkui.so\ - $PLUGDIR/converter_gtkui.fallback.so\ $PLUGDIR/convpresets\ $PLUGDIR/pulse.so\ $PLUGDIR/dsp_libsrc.so\ diff --git a/scripts/portable_postbuild.sh b/scripts/portable_postbuild.sh index 7fab1d6e..ae9b7ec1 100755 --- a/scripts/portable_postbuild.sh +++ b/scripts/portable_postbuild.sh @@ -45,10 +45,6 @@ fi if [ -f ./plugins/gtkui/.libs/ddb_gui_GTK2.fallback.so ]; then cp ./plugins/gtkui/.libs/ddb_gui_GTK2.fallback.so $PLUGDIR/ fi -if [ -f ./plugins/converter/.libs/converter_gtkui.fallback.so ]; then - cp ./plugins/converter/.libs/converter_gtkui.fallback.so $PLUGDIR/ -fi - #pixmaps diff --git a/scripts/quickinstall.sh b/scripts/quickinstall.sh index 20b89482..b7cda98b 100755 --- a/scripts/quickinstall.sh +++ b/scripts/quickinstall.sh @@ -42,3 +42,4 @@ cp ./plugins/converter/.libs/converter_gtkui.so /usr/local/lib/deadbeef/ cp ./plugins/soundtouch/ddb_soundtouch.so /usr/local/lib/deadbeef/ cp ./plugins/vfs_zip/.libs/vfs_zip.so /usr/local/lib/deadbeef/ cp ./plugins/mono2stereo/mono2stereo.so /usr/local/lib/deadbeef/ +cp ./plugins/medialib/.libs/medialib.so /usr/local/lib/deadbeef/ @@ -1580,6 +1580,7 @@ streamer_dsp_init (void) { int streamer_init (void) { + streaming_terminate = 0; #if WRITE_DUMP out = fopen ("out.raw", "w+b"); #endif @@ -121,4 +121,10 @@ streamer_dsp_refresh (void); void streamer_get_output_format (ddb_waveformat_t *fmt); +void +streamer_dsp_postinit (void); + +int +streamer_dsp_chain_save (const char *fname, ddb_dsp_context_t *chain); + #endif // __STREAMER_H @@ -19,6 +19,12 @@ by Jeff Bezanson placed in the public domain Fall 2005 */ +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif +#ifdef HAVE_ALLOCA_H +# include <alloca.h> +#endif #include <stdlib.h> #include <stdio.h> #include <string.h> diff --git a/vfs_stdio.c b/vfs_stdio.c index 840ee722..6f006efa 100644 --- a/vfs_stdio.c +++ b/vfs_stdio.c @@ -169,6 +169,7 @@ static DB_vfs_t plugin = { .plugin.version_minor = 0, .plugin.type = DB_PLUGIN_VFS, .plugin.name = "stdio vfs", + .plugin.id = "vfs_stdio", .plugin.descr = "Standard IO plugin\nUsed for reading normal local files\nIt is statically linked, so you can't delete it.", .plugin.copyright = "Copyright (C) 2009-2011 Alexey Yakovenko <waker@users.sourceforge.net>\n" diff --git a/yasmwrapper.sh b/yasmwrapper.sh new file mode 100755 index 00000000..1d0170f1 --- /dev/null +++ b/yasmwrapper.sh @@ -0,0 +1,10 @@ +#!/bin/bash +ARGS="" +for i in $@ ; do + #if [ "$i" != "-fPIC" ] && [ "$i" != "-DPIC" ]; then + if [ "$i" != "-fPIC" ]; then + ARGS="$ARGS $i" + fi +done +echo "exec: yasm $ARGS" +yasm $ARGS |