From d022d6443c6b7564ae05a3af70035822bccd0b19 Mon Sep 17 00:00:00 2001 From: Alex Bennee Date: Wed, 14 Jul 2010 16:00:32 +0100 Subject: EasyTag 2.1.3 --- src/Makefile.in | 163 +++++++------- src/about.c | 251 +++++++++++++++------ src/bar.c | 2 +- src/browser.c | 122 +++++++---- src/browser.h | 12 + src/cddb.c | 110 +++++++--- src/easytag.c | 56 +++-- src/easytag.h | 2 +- src/et_core.c | 0 src/et_core.h | 1 + src/id3_tag.c | 0 src/id3lib/Makefile.in | 129 ++++++----- src/id3v24_tag.c | 43 ++-- src/libapetag/Makefile.in | 118 +++++----- src/libmpg123/Makefile.in | 118 +++++----- src/log.c | 20 +- src/misc.c | 400 +++++++++++++++++++++++++++++---- src/msgbox.c | 2 +- src/msgbox.h | 0 src/picture.c | 5 +- src/prefs.c | 59 +++-- src/prefs.h | 2 + src/scan.c | 547 +++++++++++++++++++++++++++++----------------- src/scan.h | 16 +- src/setting.c | 16 +- src/setting.h | 6 +- src/win32/win32dep.c | 35 --- src/win32/win32dep.h | 2 - 28 files changed, 1492 insertions(+), 745 deletions(-) mode change 100755 => 100644 src/about.c mode change 100755 => 100644 src/bar.c mode change 100755 => 100644 src/browser.c mode change 100755 => 100644 src/browser.h mode change 100755 => 100644 src/easytag.h mode change 100755 => 100644 src/et_core.c mode change 100755 => 100644 src/et_core.h mode change 100755 => 100644 src/id3_tag.c mode change 100755 => 100644 src/id3v24_tag.c mode change 100755 => 100644 src/log.c mode change 100755 => 100644 src/misc.c mode change 100755 => 100644 src/msgbox.c mode change 100755 => 100644 src/msgbox.h mode change 100755 => 100644 src/picture.c mode change 100755 => 100644 src/prefs.c mode change 100755 => 100644 src/prefs.h mode change 100755 => 100644 src/scan.c mode change 100755 => 100644 src/scan.h mode change 100755 => 100644 src/setting.c mode change 100755 => 100644 src/setting.h mode change 100755 => 100644 src/win32/win32dep.c mode change 100755 => 100644 src/win32/win32dep.h (limited to 'src') diff --git a/src/Makefile.in b/src/Makefile.in index ec0e58d..858e54f 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -14,15 +14,11 @@ @SET_MAKE@ -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = .. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -65,32 +61,34 @@ easytag_OBJECTS = $(am_easytag_OBJECTS) am__DEPENDENCIES_1 = easytag_DEPENDENCIES = $(am__DEPENDENCIES_1) libmpg123/libmpg123.a \ libapetag/libapetag.a id3lib/libid3bugfix.a -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) +DEFAULT_INCLUDES = -I. -I$(top_builddir)@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) -LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ SOURCES = $(easytag_SOURCES) DIST_SOURCES = $(easytag_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ - install-exec-recursive install-info-recursive \ - install-recursive installcheck-recursive installdirs-recursive \ - pdf-recursive ps-recursive uninstall-info-recursive \ - uninstall-recursive + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ @@ -128,8 +126,10 @@ GLIB_MKENUMS = @GLIB_MKENUMS@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ +GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ @@ -143,11 +143,11 @@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ -MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ -MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ +MSGFMT_OPTS = @MSGFMT_OPTS@ OBJEXT = @OBJEXT@ OGG_CFLAGS = @OGG_CFLAGS@ OGG_LIBS = @OGG_LIBS@ @@ -175,17 +175,13 @@ VORBIS_LIBS = @VORBIS_LIBS@ WAVPACK_CFLAGS = @WAVPACK_CFLAGS@ WAVPACK_LIBS = @WAVPACK_LIBS@ XGETTEXT = @XGETTEXT@ -ac_ct_AR = @ac_ct_AR@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ -ac_ct_RANLIB = @ac_ct_RANLIB@ -ac_ct_STRIP = @ac_ct_STRIP@ -ac_pt_PKG_CONFIG = @ac_pt_PKG_CONFIG@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ @@ -197,28 +193,39 @@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ +htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ +localedir = $(datadir)/locale localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ +psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ SUBDIRS = libmpg123 libapetag id3lib easytag_SOURCES = \ about.c \ @@ -294,7 +301,6 @@ EXTRA_DIST = \ win32/win_easytag.c easytag_LDADD = $(GTK_LIBS) libmpg123/libmpg123.a libapetag/libapetag.a id3lib/libid3bugfix.a -localedir = $(datadir)/locale PACKAGE_DATA_DIR = $(datadir)/$(PACKAGE) INCLUDES = -DLOCALE=\"$(localedir)\" -DPACKAGE_DATA_DIR=\"$(PACKAGE_DATA_DIR)\" all: all-recursive @@ -332,7 +338,7 @@ $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) - test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)" + test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" @list='$(bin_PROGRAMS)'; for p in $$list; do \ p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ if test -f $$p \ @@ -360,7 +366,7 @@ clean-binPROGRAMS: done easytag$(EXEEXT): $(easytag_OBJECTS) $(easytag_DEPENDENCIES) @rm -f easytag$(EXEEXT) - $(LINK) $(easytag_LDFLAGS) $(easytag_OBJECTS) $(easytag_LDADD) $(LIBS) + $(LINK) $(easytag_OBJECTS) $(easytag_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -401,22 +407,22 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wavpack_tag.Po@am__quote@ .c.o: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: -@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< @@ -427,10 +433,6 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs -distclean-libtool: - -rm -f libtool -uninstall-info-am: - # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, @@ -462,8 +464,7 @@ $(RECURSIVE_TARGETS): $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" -mostlyclean-recursive clean-recursive distclean-recursive \ -maintainer-clean-recursive: +$(RECURSIVE_CLEAN_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ @@ -564,23 +565,21 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/win32 - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -594,7 +593,7 @@ distdir: $(DISTFILES) list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ - || $(mkdir_p) "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ distdir=`$(am__cd) $(distdir) && pwd`; \ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ @@ -602,6 +601,8 @@ distdir: $(DISTFILES) $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$top_distdir" \ distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ distdir) \ || exit 1; \ fi; \ @@ -612,7 +613,7 @@ all-am: Makefile $(PROGRAMS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(bindir)"; do \ - test -z "$$dir" || $(mkdir_p) "$$dir"; \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive @@ -646,7 +647,7 @@ distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ - distclean-libtool distclean-tags + distclean-tags dvi: dvi-recursive @@ -660,12 +661,20 @@ info-am: install-data-am: +install-dvi: install-dvi-recursive + install-exec-am: install-binPROGRAMS +install-html: install-html-recursive + install-info: install-info-recursive install-man: +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + installcheck-am: maintainer-clean: maintainer-clean-recursive @@ -686,24 +695,26 @@ ps: ps-recursive ps-am: -uninstall-am: uninstall-binPROGRAMS uninstall-info-am +uninstall-am: uninstall-binPROGRAMS -uninstall-info: uninstall-info-recursive +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip -.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \ - clean clean-binPROGRAMS clean-generic clean-libtool \ - clean-recursive ctags ctags-recursive distclean \ +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-binPROGRAMS \ + clean-generic clean-libtool ctags ctags-recursive distclean \ distclean-compile distclean-generic distclean-libtool \ - distclean-recursive distclean-tags distdir dvi dvi-am html \ - html-am info info-am install install-am install-binPROGRAMS \ - install-data install-data-am install-exec install-exec-am \ - install-info install-info-am install-man install-strip \ - installcheck installcheck-am installdirs installdirs-am \ - maintainer-clean maintainer-clean-generic \ - maintainer-clean-recursive mostlyclean mostlyclean-compile \ - mostlyclean-generic mostlyclean-libtool mostlyclean-recursive \ - pdf pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \ - uninstall-binPROGRAMS uninstall-info-am + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-binPROGRAMS install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-recursive uninstall uninstall-am \ + uninstall-binPROGRAMS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff --git a/src/about.c b/src/about.c old mode 100755 new mode 100644 index edaf3ab..f6efc08 --- a/src/about.c +++ b/src/about.c @@ -37,6 +37,7 @@ #include "about.h" #include "easytag.h" #include "misc.h" +#include "log.h" #include "msgbox.h" #include "charset.h" @@ -54,6 +55,17 @@ ****************/ static GtkWidget *AboutWindow = NULL; +enum +{ + // Columns for titles + EXTENSION_NAME = 0, + EXTENSION_STATUT, + EXTENSION_COMMENT, + + EXTENSION_COLUMN_COUNT +}; + + /************** * Prototypes * @@ -106,7 +118,7 @@ void Show_About_Window (void) GtkWidget *ScrollWindow; GtkWidget *TextView; GtkTextBuffer *TextBuffer; - GtkTextIter iter; + GtkTextIter textIter; GtkWidget *Button; GtkWidget *Logo; GdkPixmap *pixmap; @@ -125,7 +137,6 @@ void Show_About_Window (void) "simple and nice GTK+ interface makes tagging easier under GNU/Linux." ""); - /* Translation contributions */ gchar *translations_thanks_text [][2]= { {" - Bastian Kleineidam ", _("(German translation)")}, @@ -135,12 +146,12 @@ void Show_About_Window (void) {" - Sergey Zhumatiy ", _("(Russian translation)")}, {" - Andrey Astafiev ", _("(Russian translation)")}, {" - Vincent van Adrighem ", _("(Dutch translation)")}, - {" - Björn Olievier ", _("(Dutch translation)")}, + {" - Björn Olievier ", _("(Dutch translation)")}, {" - Patrik Israelsson ", _("(Swedish translation)")}, - {" - Anders Strömer ", _("(Swedish translation)")}, + {" - Anders Strömer ", _("(Swedish translation)")}, {" - Szel Miklos ", _("(Hungarian translation)")}, {" - Nagy Boldizsar ", _("(Hungarian translation)")}, - {" - Mészáros Csaba ", _("(Hungarian translation)")}, + {" - Mészáros Csaba ", _("(Hungarian translation)")}, {" - Cappelletti Lorenzo ", _("(Italian translation)")}, {" - Costantino Ceoldo ", _("(Italian translation)")}, {" - Takeshi Aihana ", _("(Japanese translation)")}, @@ -159,6 +170,7 @@ void Show_About_Window (void) {" - Luchezar P. Petkov ", _("(Bulgarian translation)")}, {" - Yang Jinsong ", _("(Chinese translation)")}, {" - Yuval Hager ", _("(Hebrew translation)")}, + {" - MiloÅ¡ Popović ", _("(Serbian translation)")}, {NULL,NULL} }; @@ -207,6 +219,16 @@ void Show_About_Window (void) " - Pierre Dumuid\n" ""; + GtkWidget *ExtensionList; + GtkListStore *ExtensionListModel; + GtkTreeViewColumn* column; + GtkCellRenderer* renderer; + gchar *ExtensionList_Titles[] = { N_("Extension Name"), + N_("Status"), + N_("Comment") + }; + GtkTreeIter treeIter; + /* Check if already opened */ if (AboutWindow) @@ -272,56 +294,9 @@ void Show_About_Window (void) Label = gtk_label_new(temp); gtk_box_pack_start(GTK_BOX(VBox),Label,FALSE,TRUE,0); -#ifdef ENABLE_MP3 // FIX ME : should separate gtk and id3lib - sprintf(temp,_("(using: GTK+ %d.%d.%d)"),GTK_MAJOR_VERSION,GTK_MINOR_VERSION, - GTK_MICRO_VERSION); - Label = gtk_label_new(temp); - gtk_box_pack_start(GTK_BOX(VBox),Label,FALSE,TRUE,0); -#endif - -#ifdef ENABLE_MP3 - sprintf(temp, _("(MP3 file support enabled using: libid3tag %s)"), ID3_VERSION); - Label = gtk_label_new(temp); - gtk_box_pack_start(GTK_BOX(VBox),Label,FALSE,TRUE,0); -#if (defined ENABLE_ID3LIB) - sprintf(temp, _("(ID3v2.3 tags support enabled using: id3lib %d.%d.%d)"), - ID3LIB_MAJOR_VERSION, ID3LIB_MINOR_VERSION, ID3LIB_PATCH_VERSION); - Label = gtk_label_new(temp); - gtk_box_pack_start(GTK_BOX(VBox),Label,FALSE,TRUE,0); -#else - Label = gtk_label_new(_("(ID3v2.3 tags support disabled)")); - gtk_box_pack_start(GTK_BOX(VBox),Label,FALSE,TRUE,0); -#endif -#else - sprintf(temp, _("(MP3 file support disabled)")); + sprintf(temp,_("(using: GTK+ %d.%d.%d)"),GTK_MAJOR_VERSION,GTK_MINOR_VERSION,GTK_MICRO_VERSION); Label = gtk_label_new(temp); gtk_box_pack_start(GTK_BOX(VBox),Label,FALSE,TRUE,0); -#endif - -#ifndef ENABLE_OGG - Label = gtk_label_new(_("(Ogg Vorbis file support disabled)")); - gtk_box_pack_start(GTK_BOX(VBox),Label,FALSE,TRUE,0); -#endif - -#ifndef ENABLE_SPEEX - Label = gtk_label_new(_("(Speex file support disabled)")); - gtk_box_pack_start(GTK_BOX(VBox),Label,FALSE,TRUE,0); -#endif - -#ifndef ENABLE_FLAC - Label = gtk_label_new(_("(FLAC file support disabled)")); - gtk_box_pack_start(GTK_BOX(VBox),Label,FALSE,TRUE,0); -#endif - -#ifndef ENABLE_MP4 - Label = gtk_label_new(_("(MP4/AAC file support disabled)")); - gtk_box_pack_start(GTK_BOX(VBox),Label,FALSE,TRUE,0); -#endif - -#ifndef ENABLE_WAVPACK - Label = gtk_label_new(_("(WavPack file support disabled)")); - gtk_box_pack_start(GTK_BOX(VBox),Label,FALSE,TRUE,0); -#endif /* Insert a blank line */ Label = gtk_label_new(""); @@ -341,6 +316,7 @@ void Show_About_Window (void) gtk_misc_set_alignment(GTK_MISC(Label),1,0.5); gtk_box_pack_start(GTK_BOX(hbox),Label,TRUE,TRUE,0); Button = gtk_button_new_with_label(WEBPAGE); + //Button = gtk_link_button_new(WEBPAGE); gtk_box_pack_start(GTK_BOX(hbox),Button,TRUE,TRUE,0); g_signal_connect(G_OBJECT(Button),"clicked", G_CALLBACK(About_Window_Go_To_Home_Page),NULL); gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE); @@ -361,13 +337,142 @@ void Show_About_Window (void) gtk_container_resize_children(GTK_CONTAINER(Frame)); + /* + * Tab for extensions + */ + + Label = gtk_label_new(_("Extensions")); + Frame = gtk_frame_new(NULL); + gtk_notebook_append_page(GTK_NOTEBOOK(AboutNoteBook),Frame,Label); + + ScrollWindow = gtk_scrolled_window_new(NULL,NULL); + gtk_container_add(GTK_CONTAINER(Frame),ScrollWindow); + gtk_container_set_border_width(GTK_CONTAINER(Frame),2); + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(ScrollWindow), + GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC); + + ExtensionListModel = gtk_list_store_new(EXTENSION_COLUMN_COUNT, + G_TYPE_STRING, /* Extension name */ + G_TYPE_STRING, /* Statut */ + G_TYPE_STRING /* Comment */ + ); + ExtensionList = gtk_tree_view_new_with_model(GTK_TREE_MODEL(ExtensionListModel)); + + renderer = gtk_cell_renderer_text_new(); /* Extension name */ + column = gtk_tree_view_column_new_with_attributes(_(ExtensionList_Titles[0]), renderer, + "text", EXTENSION_NAME, + NULL); + gtk_tree_view_append_column(GTK_TREE_VIEW(ExtensionList), column); + gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE); + + renderer = gtk_cell_renderer_text_new(); /* Statut */ + column = gtk_tree_view_column_new_with_attributes(_(ExtensionList_Titles[1]), renderer, + "text", EXTENSION_STATUT, + NULL); + gtk_tree_view_append_column(GTK_TREE_VIEW(ExtensionList), column); + gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE); + + renderer = gtk_cell_renderer_text_new(); /* Comment */ + column = gtk_tree_view_column_new_with_attributes(_(ExtensionList_Titles[2]), renderer, + "text", EXTENSION_COMMENT, + NULL); + gtk_tree_view_append_column(GTK_TREE_VIEW(ExtensionList), column); + gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE); + + gtk_container_add(GTK_CONTAINER(ScrollWindow),ExtensionList); + gtk_tree_selection_set_mode(gtk_tree_view_get_selection(GTK_TREE_VIEW(ExtensionList)), + GTK_SELECTION_NONE); + gtk_tree_view_set_headers_clickable(GTK_TREE_VIEW(ExtensionList), FALSE); + + // Load extensions list + // MP3 +#ifdef ENABLE_MP3 + sprintf(temp, _("libid3tag %s"), ID3_VERSION); +#endif + gtk_list_store_append(ExtensionListModel, &treeIter); + gtk_list_store_set(ExtensionListModel, &treeIter, + EXTENSION_NAME, _("MP3 file support"), +#ifdef ENABLE_MP3 + EXTENSION_STATUT, _("enabled"), + EXTENSION_COMMENT, temp, +#else + EXTENSION_STATUT, _("disabled"), +#endif + -1); +#ifdef ENABLE_MP3 +#if (defined ENABLE_ID3LIB) + sprintf(temp, _("id3lib %d.%d.%d"), ID3LIB_MAJOR_VERSION, ID3LIB_MINOR_VERSION, ID3LIB_PATCH_VERSION); +#endif + gtk_list_store_append(ExtensionListModel, &treeIter); + gtk_list_store_set(ExtensionListModel, &treeIter, + EXTENSION_NAME, _("ID3v2.3 tags writting support"), +#if (defined ENABLE_ID3LIB) + EXTENSION_STATUT, _("available"), // May not be used + EXTENSION_COMMENT, temp, +#else + EXTENSION_STATUT, _("disabled"), +#endif + -1); +#endif + // Ogg Vorbis + gtk_list_store_append(ExtensionListModel, &treeIter); + gtk_list_store_set(ExtensionListModel, &treeIter, + EXTENSION_NAME, _("Ogg Vorbis file support"), +#ifdef ENABLE_OGG + EXTENSION_STATUT, _("enabled"), +#else + EXTENSION_STATUT, _("disabled"), +#endif + -1); + // Speex + gtk_list_store_append(ExtensionListModel, &treeIter); + gtk_list_store_set(ExtensionListModel, &treeIter, + EXTENSION_NAME, _("Speex file support"), +#ifdef ENABLE_SPEEX + EXTENSION_STATUT, _("enabled"), +#else + EXTENSION_STATUT, _("disabled"), +#endif + -1); + // FLAC + gtk_list_store_append(ExtensionListModel, &treeIter); + gtk_list_store_set(ExtensionListModel, &treeIter, + EXTENSION_NAME, _("FLAC file support"), +#ifdef ENABLE_FLAC + EXTENSION_STATUT, _("enabled"), +#else + EXTENSION_STATUT, _("disabled"), +#endif + -1); + // MP4 + gtk_list_store_append(ExtensionListModel, &treeIter); + gtk_list_store_set(ExtensionListModel, &treeIter, + EXTENSION_NAME, _("MP4/AAC file support"), +#ifdef ENABLE_MP4 + EXTENSION_STATUT, _("enabled"), +#else + EXTENSION_STATUT, _("disabled"), +#endif + -1); + // WavPack + gtk_list_store_append(ExtensionListModel, &treeIter); + gtk_list_store_set(ExtensionListModel, &treeIter, + EXTENSION_NAME, _("WavPack file support"), +#ifdef ENABLE_WAVPACK + EXTENSION_STATUT, _("enabled"), +#else + EXTENSION_STATUT, _("disabled"), +#endif + -1); + + /* * Tab for thanks */ Label = gtk_label_new(_("Thanks")); Frame = gtk_frame_new(NULL); - gtk_notebook_append_page (GTK_NOTEBOOK(AboutNoteBook),Frame,Label); + gtk_notebook_append_page(GTK_NOTEBOOK(AboutNoteBook),Frame,Label); ScrollWindow = gtk_scrolled_window_new(NULL,NULL); gtk_container_add(GTK_CONTAINER(Frame),ScrollWindow); @@ -383,10 +488,10 @@ void Show_About_Window (void) //gtk_text_buffer_create_tag(TextBuffer, "x-large", "scale", PANGO_SCALE_X_LARGE, NULL); //gtk_text_buffer_create_tag(TextBuffer, "monospace", "family", "monospace", NULL); - gtk_text_buffer_get_iter_at_offset(TextBuffer, &iter, 0); + gtk_text_buffer_get_iter_at_offset(TextBuffer, &textIter, 0); temp_str = _("Translations:\n"); - gtk_text_buffer_insert_with_tags_by_name(TextBuffer, &iter, + gtk_text_buffer_insert_with_tags_by_name(TextBuffer, &textIter, temp_str, -1, "bold", "underline", "large", NULL); @@ -397,7 +502,7 @@ void Show_About_Window (void) temp_str = convert_string(translations_thanks_text[i][0], "iso-8859-1", "utf-8",TRUE); else temp_str = g_strdup(translations_thanks_text[i][0]); - gtk_text_buffer_insert(TextBuffer, &iter, temp_str, -1); + gtk_text_buffer_insert(TextBuffer, &textIter, temp_str, -1); g_free(temp_str); // Translation language @@ -405,19 +510,19 @@ void Show_About_Window (void) temp_str = convert_string(translations_thanks_text[i][1], "iso-8859-1", "utf-8",TRUE); else temp_str = g_strdup(translations_thanks_text[i][1]); - gtk_text_buffer_insert_with_tags_by_name(TextBuffer, &iter, temp_str, -1, + gtk_text_buffer_insert_with_tags_by_name(TextBuffer, &textIter, temp_str, -1, "italic", NULL); g_free(temp_str); - gtk_text_buffer_insert(TextBuffer, &iter, "\n", -1); + gtk_text_buffer_insert(TextBuffer, &textIter, "\n", -1); } - gtk_text_buffer_insert(TextBuffer, &iter, "\n", -1); + gtk_text_buffer_insert(TextBuffer, &textIter, "\n", -1); temp_str = _("General:\n"); - gtk_text_buffer_insert_with_tags_by_name(TextBuffer, &iter, + gtk_text_buffer_insert_with_tags_by_name(TextBuffer, &textIter, temp_str, -1, "bold", "underline", "large", NULL); - gtk_text_buffer_insert(TextBuffer, &iter, general_thanks_text, -1); + gtk_text_buffer_insert(TextBuffer, &textIter, general_thanks_text, -1); TextView = gtk_text_view_new_with_buffer(TextBuffer); gtk_container_add(GTK_CONTAINER(ScrollWindow),TextView); @@ -441,19 +546,19 @@ void Show_About_Window (void) GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC); TextBuffer = gtk_text_buffer_new(NULL); - gtk_text_buffer_get_iter_at_offset(TextBuffer, &iter, 0); + gtk_text_buffer_get_iter_at_offset(TextBuffer, &textIter, 0); gtk_text_buffer_create_tag(TextBuffer, "monospace", "family", "monospace", NULL); gtk_text_buffer_create_tag(TextBuffer, "red_foreground", "foreground", "red", NULL); gtk_text_buffer_create_tag(TextBuffer, "blue_foreground", "foreground", "blue", NULL); gtk_text_buffer_create_tag(TextBuffer, "bold", "weight", PANGO_WEIGHT_BOLD, NULL); - gtk_text_buffer_get_iter_at_offset(TextBuffer, &iter, 0); + gtk_text_buffer_get_iter_at_offset(TextBuffer, &textIter, 0); // The file 'ChangeLog' to read if ( (file=fopen(PACKAGE_DATA_DIR"/ChangeLog","r"))==0 ) { gchar *msg = g_strdup_printf(_("Can't open file '%s' (%s)\n"),PACKAGE_DATA_DIR"/ChangeLog",g_strerror(errno)); - gtk_text_buffer_insert_with_tags_by_name(TextBuffer, &iter, + gtk_text_buffer_insert_with_tags_by_name(TextBuffer, &textIter, msg, -1, "monospace", "red_foreground", NULL); g_free(msg); @@ -479,26 +584,26 @@ void Show_About_Window (void) first_version++; // To set to bold the title of the version and to red the first version if (first_version > 2) // As title takes 2 lines - gtk_text_buffer_insert_with_tags_by_name(TextBuffer, &iter, + gtk_text_buffer_insert_with_tags_by_name(TextBuffer, &textIter, tmp, -1, "monospace", "bold", NULL); else - gtk_text_buffer_insert_with_tags_by_name(TextBuffer, &iter, + gtk_text_buffer_insert_with_tags_by_name(TextBuffer, &textIter, tmp, -1, "monospace", "bold", "blue_foreground", NULL); }else { if (first_version > 2) // As title takes 2 lines - gtk_text_buffer_insert_with_tags_by_name(TextBuffer, &iter, + gtk_text_buffer_insert_with_tags_by_name(TextBuffer, &textIter, tmp, -1, "monospace", NULL); else - gtk_text_buffer_insert_with_tags_by_name(TextBuffer, &iter, + gtk_text_buffer_insert_with_tags_by_name(TextBuffer, &textIter, tmp, -1, "monospace", "blue_foreground", NULL); } - gtk_text_buffer_insert(TextBuffer, &iter, "\n", -1); + gtk_text_buffer_insert(TextBuffer, &textIter, "\n", -1); g_free(tmp); } fclose(file); @@ -513,7 +618,7 @@ void Show_About_Window (void) /* * Close Button */ - Button = Create_Button_With_Pixmap(BUTTON_CLOSE); + Button = gtk_button_new_from_stock(GTK_STOCK_CLOSE); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(AboutWindow)->action_area),Button,FALSE,FALSE,0); g_signal_connect(G_OBJECT(Button),"clicked", G_CALLBACK(Quit_About_Window),NULL); GTK_WIDGET_SET_FLAGS(Button,GTK_CAN_DEFAULT); @@ -532,6 +637,8 @@ void About_Window_Go_To_Home_Page (void) #ifdef WIN32 ET_Win32_Notify_Uri(WEBPAGE); #else - system("gnome-moz-remote "WEBPAGE); + if (system("gnome-moz-remote "WEBPAGE)!=0) + if (system("x-www-browser "WEBPAGE)!=0) + system("www-browser "WEBPAGE); #endif } diff --git a/src/bar.c b/src/bar.c old mode 100755 new mode 100644 index fc44855..6f75403 --- a/src/bar.c +++ b/src/bar.c @@ -233,7 +233,7 @@ void Create_UI (GtkWidget **ppmenubar, GtkWidget **pptoolbar) { AM_OPEN_OPTIONS_WINDOW, GTK_STOCK_PREFERENCES, _("_Preferences ..."), "P", _("Preferences ..."), G_CALLBACK(Open_OptionsWindow) }, { MENU_HELP, NULL, _("_Help"), NULL, NULL, NULL }, - { AM_OPEN_ABOUT_WINDOW, GTK_STOCK_HELP, _("_About"), NULL, _("About"), G_CALLBACK(Show_About_Window) }, + { AM_OPEN_ABOUT_WINDOW, GTK_STOCK_ABOUT, _("_About"), NULL, _("About"), G_CALLBACK(Show_About_Window) }, /* diff --git a/src/browser.c b/src/browser.c old mode 100755 new mode 100644 index e807e7a..3261692 --- a/src/browser.c +++ b/src/browser.c @@ -527,7 +527,7 @@ gboolean Browser_List_Key_Press (GtkWidget *list, GdkEvent *event, gpointer data { gtk_tree_model_get(GTK_TREE_MODEL(fileListModel), ¤tIter, LIST_FILE_POINTER, ¤tETFile, - LIST_FILE_NAME, ¤t_filename, + LIST_FILE_NAME, ¤t_filename, -1); /* UTF-8 comparison */ @@ -688,13 +688,13 @@ gboolean Browser_Tree_Node_Selected (GtkTreeSelection *selection, gpointer user_ { gtk_tree_view_expand_row(GTK_TREE_VIEW(BrowserTree), selectedPath, FALSE); } + gtk_tree_path_free(selectedPath); /* Don't start a new reading, if another one is running... */ if (ReadingDirectory == TRUE) return TRUE; //Browser_Tree_Set_Node_Visible(BrowserTree, selectedPath); - gtk_tree_path_free(selectedPath); gtk_tree_model_get(GTK_TREE_MODEL(directoryTreeModel), &selectedIter, TREE_COLUMN_FULL_PATH, &pathName, -1); if (!pathName) @@ -738,13 +738,40 @@ gboolean Browser_Tree_Node_Selected (GtkTreeSelection *selection, gpointer user_ gtk_entry_set_text(GTK_ENTRY(GTK_BIN(BrowserEntryCombo)->child), pathName_utf8); /* Start to read the directory */ - /* The first time 'counter' is equal to zero and if we don't want to load - * directory on startup, we skip the 'reading', but we must read it */ + /* The first time, 'counter' is equal to zero. And if we don't want to load + * directory on startup, we skip the 'reading', but newt we must read it each time */ if (LOAD_ON_STARTUP || counter) - Read_Directory(pathName); - else + { + gboolean dir_loaded; + GtkTreeIter parentIter; + + dir_loaded = Read_Directory(pathName); + + // If the directory can't be loaded, the directory musn't exist. + // So we load the parent node and refresh the children + if (dir_loaded == FALSE) + { + if (gtk_tree_selection_get_selected(selection, NULL, &selectedIter)) + { + if (gtk_tree_model_iter_parent(GTK_TREE_MODEL(directoryTreeModel),&parentIter,&selectedIter) ) + { + gtk_tree_selection_select_iter(selection,&parentIter); + selectedPath = gtk_tree_model_get_path(GTK_TREE_MODEL(directoryTreeModel), &parentIter); + gtk_tree_view_collapse_row(GTK_TREE_VIEW(BrowserTree),selectedPath); + if (OPEN_SELECTED_BROWSER_NODE) + { + gtk_tree_view_expand_row(GTK_TREE_VIEW(BrowserTree),selectedPath,FALSE); + } + gtk_tree_path_free(selectedPath); + } + } + } + + }else + { /* As we don't use the function 'Read_Directory' we must add this function here */ Update_Command_Buttons_Sensivity(); + } counter++; g_free(pathName); @@ -796,7 +823,6 @@ gint Browser_Tree_Select_Dir (gchar *current_path) { GtkTreePath *rootPath = NULL; GtkTreeIter parentNode, currentNode; - struct stat stbuf; gint index = 1; // Skip the first token as it is NULL due to leading / gchar **parts; gchar *nodeName; @@ -815,26 +841,9 @@ gint Browser_Tree_Select_Dir (gchar *current_path) ET_Win32_Path_Remove_Trailing_Backslash(current_path); #endif - /* If path is invalid: inform the user, but load the first directories - * of the full path while parent directories are valid */ - if (stat(current_path,&stbuf)==-1) - { - GtkWidget *msgbox; - gchar *msg; - gchar *current_path_utf8; - - current_path_utf8 = filename_to_display(current_path); - msg = g_strdup_printf(_("The entered path is invalid!:\n%s\n(%s)"), - current_path_utf8,g_strerror(errno)); - msgbox = msg_box_new(_("Error..."),msg,GTK_STOCK_DIALOG_ERROR,BUTTON_OK,0); - g_free(msg); - msg_box_hide_check_button(MSG_BOX(msgbox)); - msg_box_run(MSG_BOX(msgbox)); - gtk_widget_destroy(msgbox); - g_free(current_path_utf8); - return FALSE; - } - + /* Don't check here if the path is valid. It will be done later when + * selecting a node in the tree */ + Browser_Update_Current_Path(current_path); parts = g_strsplit((const gchar*)current_path, G_DIR_SEPARATOR_S, 0); @@ -897,6 +906,7 @@ gint Browser_Tree_Select_Dir (gchar *current_path) if (rootPath) { gtk_tree_view_expand_to_path(GTK_TREE_VIEW(BrowserTree), rootPath); + // Select the node to load the corresponding directory gtk_tree_selection_select_path(gtk_tree_view_get_selection(GTK_TREE_VIEW(BrowserTree)), rootPath); Browser_Tree_Set_Node_Visible(BrowserTree, rootPath); gtk_tree_path_free(rootPath); @@ -935,7 +945,8 @@ void Browser_List_Row_Selected (GtkTreeSelection *selection, gpointer data) // Returns the last line selected (in ascending line order) to display the item lastSelected = (GtkTreePath *)g_list_last(selectedRows)->data; if (gtk_tree_model_get_iter(GTK_TREE_MODEL(fileListModel), &lastFile, lastSelected)) - gtk_tree_model_get(GTK_TREE_MODEL(fileListModel), &lastFile, LIST_FILE_POINTER, &fileETFile, -1); + gtk_tree_model_get(GTK_TREE_MODEL(fileListModel), &lastFile, + LIST_FILE_POINTER, &fileETFile, -1); Action_Select_Nth_File_By_Etfile(fileETFile); }else @@ -988,10 +999,10 @@ void Browser_List_Load_File_List (GList *etfilelist, ET_File *etfile_to_select) // File list displays the current filename (name on HD) gtk_list_store_append(fileListModel, &row); gtk_list_store_set(fileListModel, &row, - LIST_FILE_NAME, basename_utf8, - LIST_FILE_POINTER, etfilelist->data, - LIST_FILE_KEY, fileKey, - LIST_FILE_OTHERDIR, activate_bg_color, + LIST_FILE_NAME, basename_utf8, + LIST_FILE_POINTER, etfilelist->data, + LIST_FILE_KEY, fileKey, + LIST_FILE_OTHERDIR, activate_bg_color, -1); g_free(basename_utf8); @@ -1278,14 +1289,23 @@ void Browser_List_Set_Row_Appearance (GtkTreeIter *iter) { if (CHANGED_FILES_DISPLAYED_TO_BOLD) { - gtk_list_store_set(fileListModel, iter, LIST_FONT_WEIGHT, PANGO_WEIGHT_BOLD, LIST_ROW_BACKGROUND, backgroundcolor, LIST_ROW_FOREGROUND, NULL, -1); + gtk_list_store_set(fileListModel, iter, + LIST_FONT_WEIGHT, PANGO_WEIGHT_BOLD, + LIST_ROW_BACKGROUND, backgroundcolor, + LIST_ROW_FOREGROUND, NULL, -1); } else { - gtk_list_store_set(fileListModel, iter, LIST_FONT_WEIGHT, PANGO_WEIGHT_NORMAL, LIST_ROW_BACKGROUND, backgroundcolor, LIST_ROW_FOREGROUND, &RED, -1); + gtk_list_store_set(fileListModel, iter, + LIST_FONT_WEIGHT, PANGO_WEIGHT_NORMAL, + LIST_ROW_BACKGROUND, backgroundcolor, + LIST_ROW_FOREGROUND, &RED, -1); } } else { - gtk_list_store_set(fileListModel, iter, LIST_FONT_WEIGHT, PANGO_WEIGHT_NORMAL, LIST_ROW_BACKGROUND, backgroundcolor, LIST_ROW_FOREGROUND, NULL ,-1); + gtk_list_store_set(fileListModel, iter, + LIST_FONT_WEIGHT, PANGO_WEIGHT_NORMAL, + LIST_ROW_BACKGROUND, backgroundcolor, + LIST_ROW_FOREGROUND, NULL ,-1); } // Frees allocated item from gtk_tree_model_get... g_free(temp); @@ -1317,7 +1337,8 @@ void Browser_List_Remove_File (ET_File *searchETFile) valid = gtk_tree_model_get_iter(GTK_TREE_MODEL(fileListModel), ¤tIter, currentPath); if (valid) { - gtk_tree_model_get(GTK_TREE_MODEL(fileListModel), ¤tIter, LIST_FILE_POINTER, ¤tETFile, -1); + gtk_tree_model_get(GTK_TREE_MODEL(fileListModel), ¤tIter, + LIST_FILE_POINTER, ¤tETFile, -1); if (currentETFile == searchETFile) { @@ -1392,7 +1413,8 @@ GtkTreePath *Browser_List_Select_File_By_Etfile2 (ET_File *searchETFile, gboolea valid = gtk_tree_model_get_iter(GTK_TREE_MODEL(fileListModel), ¤tIter, startPath); if (valid) { - gtk_tree_model_get(GTK_TREE_MODEL(fileListModel), ¤tIter, LIST_FILE_POINTER, ¤tETFile, -1); + gtk_tree_model_get(GTK_TREE_MODEL(fileListModel), ¤tIter, + LIST_FILE_POINTER, ¤tETFile, -1); // It is the good file? if (currentETFile == searchETFile) { @@ -1410,7 +1432,8 @@ GtkTreePath *Browser_List_Select_File_By_Etfile2 (ET_File *searchETFile, gboolea valid = gtk_tree_model_get_iter(GTK_TREE_MODEL(fileListModel), ¤tIter, currentPath); if (valid) { - gtk_tree_model_get(GTK_TREE_MODEL(fileListModel), ¤tIter, LIST_FILE_POINTER, ¤tETFile, -1); + gtk_tree_model_get(GTK_TREE_MODEL(fileListModel), ¤tIter, + LIST_FILE_POINTER, ¤tETFile, -1); if (currentETFile == searchETFile) { @@ -1548,7 +1571,8 @@ void Browser_List_Unselect_File_By_Etfile(ET_File *searchETFile) valid = gtk_tree_model_get_iter(GTK_TREE_MODEL(fileListModel), ¤tIter, currentPath); if (valid) { - gtk_tree_model_get(GTK_TREE_MODEL(fileListModel), ¤tIter, LIST_FILE_POINTER, ¤tETFile, -1); + gtk_tree_model_get(GTK_TREE_MODEL(fileListModel), ¤tIter, + LIST_FILE_POINTER, ¤tETFile, -1); if (currentETFile == searchETFile) { @@ -3064,6 +3088,8 @@ GtkWidget *Create_Browser_Items (GtkWidget *parent) gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(BrowserList), FALSE); gtk_container_add(GTK_CONTAINER(ScrollWindowFileList), BrowserList); gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(BrowserList), FALSE); + + // Column for File Name renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new(); gtk_tree_view_column_pack_start(column, renderer, FALSE); @@ -3075,6 +3101,7 @@ GtkWidget *Create_Browser_Items (GtkWidget *parent) NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(BrowserList), column); gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE); + gtk_tree_view_set_reorderable(GTK_TREE_VIEW(BrowserList), FALSE); gtk_tree_selection_set_mode(gtk_tree_view_get_selection(GTK_TREE_VIEW(BrowserList)),GTK_SELECTION_MULTIPLE); // When selecting a line @@ -3274,14 +3301,14 @@ void Browser_Open_Rename_Directory_Window (void) gtk_box_set_spacing(GTK_BOX(ButtonBox),10); /* Button to cancel */ - Button = Create_Button_With_Pixmap(BUTTON_CANCEL); + Button = gtk_button_new_from_stock(GTK_STOCK_CANCEL); gtk_container_add(GTK_CONTAINER(ButtonBox),Button); GTK_WIDGET_SET_FLAGS(Button,GTK_CAN_DEFAULT); - //gtk_widget_grab_default(Button); + gtk_widget_grab_default(Button); g_signal_connect_swapped(G_OBJECT(Button),"clicked",G_CALLBACK(Destroy_Rename_Directory_Window), G_OBJECT(RenameDirectoryCombo)); /* Button to save: to rename directory */ - Button = Create_Button_With_Pixmap(BUTTON_APPLY); + Button = gtk_button_new_from_stock(GTK_STOCK_APPLY); gtk_container_add(GTK_CONTAINER(ButtonBox),Button); GTK_WIDGET_SET_FLAGS(Button,GTK_CAN_DEFAULT); g_signal_connect_swapped(G_OBJECT(Button),"clicked", G_CALLBACK(Rename_Directory),NULL); @@ -3670,14 +3697,14 @@ void Browser_Open_Run_Program_Tree_Window (void) gtk_box_set_spacing(GTK_BOX(ButtonBox), 10); /* Button to cancel */ - Button = Create_Button_With_Pixmap(BUTTON_CANCEL); + Button = gtk_button_new_from_stock(GTK_STOCK_CANCEL); gtk_container_add(GTK_CONTAINER(ButtonBox),Button); GTK_WIDGET_SET_FLAGS(Button,GTK_CAN_DEFAULT); gtk_widget_grab_default(Button); g_signal_connect(G_OBJECT(Button),"clicked", G_CALLBACK(Destroy_Run_Program_Tree_Window),NULL); /* Button to execute */ - Button = Create_Button_With_Pixmap(BUTTON_EXECUTE); + Button = gtk_button_new_from_stock(GTK_STOCK_EXECUTE); gtk_container_add(GTK_CONTAINER(ButtonBox),Button); GTK_WIDGET_SET_FLAGS(Button,GTK_CAN_DEFAULT); g_signal_connect_swapped(G_OBJECT(Button),"clicked", G_CALLBACK(Run_Program_With_Directory),G_OBJECT(RunProgramComboBox)); @@ -3830,14 +3857,14 @@ void Browser_Open_Run_Program_List_Window (void) gtk_box_set_spacing(GTK_BOX(ButtonBox), 10); /* Button to cancel */ - Button = Create_Button_With_Pixmap(BUTTON_CANCEL); + Button = gtk_button_new_from_stock(GTK_STOCK_CANCEL); gtk_container_add(GTK_CONTAINER(ButtonBox),Button); GTK_WIDGET_SET_FLAGS(Button,GTK_CAN_DEFAULT); gtk_widget_grab_default(Button); g_signal_connect(G_OBJECT(Button),"clicked", G_CALLBACK(Destroy_Run_Program_List_Window),NULL); /* Button to execute */ - Button = Create_Button_With_Pixmap(BUTTON_EXECUTE); + Button = gtk_button_new_from_stock(GTK_STOCK_EXECUTE); gtk_container_add(GTK_CONTAINER(ButtonBox),Button); GTK_WIDGET_SET_FLAGS(Button,GTK_CAN_DEFAULT); g_signal_connect_swapped(G_OBJECT(Button),"clicked", G_CALLBACK(Run_Program_With_Selected_Files),G_OBJECT(RunProgramComboBox)); @@ -3955,7 +3982,8 @@ gboolean Run_Program (gchar *program_name, GList *args_list) { GtkWidget *msgbox; - msgbox = msg_box_new(_("Error..."),_("You must type a program name!"),GTK_STOCK_DIALOG_ERROR,BUTTON_OK,0); + msgbox = msg_box_new(_("Error..."),_("You must type a program name!"), + GTK_STOCK_DIALOG_ERROR,BUTTON_OK,0); msg_box_hide_check_button(MSG_BOX(msgbox)); msg_box_run(MSG_BOX(msgbox)); gtk_widget_destroy(msgbox); diff --git a/src/browser.h b/src/browser.h old mode 100755 new mode 100644 index 3720c38..fb02029 --- a/src/browser.h +++ b/src/browser.h @@ -80,6 +80,18 @@ enum LIST_FONT_WEIGHT, LIST_ROW_BACKGROUND, LIST_ROW_FOREGROUND, + // Tag fields + /*LIST_FILE_TITLE, + LIST_FILE_ARTIST, + LIST_FILE_ALBUM, + LIST_FILE_YEAR, + LIST_FILE_GENRE, + LIST_FILE_COMMENT, + LIST_FILE_COMPOSER, + LIST_FILE_ORIG_ARTIST, + LIST_FILE_COPYRIGHT, + LIST_FILE_URL, + LIST_FILE_ENCODED_BY,*/ LIST_COLUMN_COUNT }; diff --git a/src/cddb.c b/src/cddb.c index f3cc888..e8cf147 100644 --- a/src/cddb.c +++ b/src/cddb.c @@ -286,7 +286,7 @@ void Open_Cddb_Window (void) gtk_box_pack_start(GTK_BOX(hbox),Label,FALSE,FALSE,0); // Button to generate CddbId and request string from the selected files - CddbSearchAutoButton = Create_Button_With_Pixmap(BUTTON_SEARCH); + CddbSearchAutoButton = gtk_button_new_from_stock(GTK_STOCK_FIND); gtk_box_pack_start(GTK_BOX(hbox),CddbSearchAutoButton,FALSE,FALSE,0); GTK_WIDGET_SET_FLAGS(CddbSearchAutoButton,GTK_CAN_DEFAULT); gtk_widget_grab_default(CddbSearchAutoButton); @@ -347,7 +347,7 @@ void Open_Cddb_Window (void) g_signal_connect(G_OBJECT(Button),"clicked",G_CALLBACK(ET_Sort_Displayed_File_List_And_Update_UI),GINT_TO_POINTER(SORTING_BY_ASCENDING_TRACK_NUMBER)); */ // Button to quit - Button = Create_Button_With_Pixmap(BUTTON_CLOSE); + Button = gtk_button_new_from_stock(GTK_STOCK_CLOSE); gtk_box_pack_end(GTK_BOX(hbox),Button,FALSE,FALSE,0); GTK_WIDGET_SET_FLAGS(Button,GTK_CAN_DEFAULT); g_signal_connect(G_OBJECT(Button),"clicked", G_CALLBACK(Cddb_Destroy_Window),NULL); @@ -396,7 +396,7 @@ void Open_Cddb_Window (void) gtk_editable_paste_clipboard(GTK_EDITABLE(GTK_BIN(CddbSearchStringCombo)->child)); // Button to run the search - CddbSearchButton = Create_Button_With_Pixmap(BUTTON_SEARCH); + CddbSearchButton = gtk_button_new_from_stock(GTK_STOCK_FIND); gtk_box_pack_start(GTK_BOX(hbox),CddbSearchButton,FALSE,FALSE,0); GTK_WIDGET_SET_FLAGS(CddbSearchButton,GTK_CAN_DEFAULT); gtk_widget_grab_default(CddbSearchButton); @@ -414,7 +414,7 @@ void Open_Cddb_Window (void) gtk_tooltips_set_tip(Tips,CddbStopSearchButton,_("Stop the search ..."),NULL); // Button to quit - Button = Create_Button_With_Pixmap(BUTTON_CLOSE); + Button = gtk_button_new_from_stock(GTK_STOCK_CLOSE); gtk_box_pack_end(GTK_BOX(hbox),Button,FALSE,FALSE,0); GTK_WIDGET_SET_FLAGS(Button,GTK_CAN_DEFAULT); g_signal_connect(G_OBJECT(Button),"clicked", G_CALLBACK(Cddb_Destroy_Window),NULL); @@ -783,7 +783,7 @@ void Open_Cddb_Window (void) g_signal_connect(G_OBJECT(CddbUseDLM2),"toggled",G_CALLBACK(Cddb_Use_Dlm_2_Check_Button_Toggled),NULL); // Button to apply - CddbApplyButton = Create_Button_With_Pixmap(BUTTON_APPLY); + CddbApplyButton = gtk_button_new_from_stock(GTK_STOCK_APPLY); gtk_box_pack_end(GTK_BOX(hbox),CddbApplyButton,FALSE,FALSE,2); g_signal_connect(G_OBJECT(CddbApplyButton),"clicked", G_CALLBACK(Cddb_Set_Track_Infos_To_File_List),NULL); gtk_tooltips_set_tip(Tips,CddbApplyButton,_("Load the selected lines or all lines (if no line selected)."),NULL); @@ -828,10 +828,6 @@ gboolean Cddb_Destroy_Window (GtkWidget *widget, GdkEvent *event, gpointer data) { Cddb_Window_Apply_Changes(); - // Save combobox history lists before exit - Save_Cddb_Search_String_List(CddbSearchStringModel, MISC_COMBO_TEXT); - Save_Cddb_Search_String_In_Result_List(CddbSearchStringInResultModel, MISC_COMBO_TEXT); - // FIX ME : This causes problem with memory !! Cddb_Free_Album_List(); @@ -908,6 +904,9 @@ void Cddb_Window_Apply_Changes (void) CDDB_USE_DLM = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbUseDLM2)); CDDB_USE_LOCAL_ACCESS = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbUseLocalAccess)); + // Save combobox history lists before exit + Save_Cddb_Search_String_List(CddbSearchStringModel, MISC_COMBO_TEXT); + Save_Cddb_Search_String_In_Result_List(CddbSearchStringInResultModel, MISC_COMBO_TEXT); } } @@ -1494,30 +1493,35 @@ GtkWidget *Create_Cddb_Track_List_Popup_Menu(GtkWidget *list) CddbPopupMenu = gtk_menu_new(); g_signal_connect_swapped(G_OBJECT(list), "button_press_event", - G_CALLBACK(Cddb_Popup_Menu_Handler), G_OBJECT(CddbPopupMenu)); + G_CALLBACK(Cddb_Popup_Menu_Handler), G_OBJECT(CddbPopupMenu)); MenuItem = gtk_menu_item_new_with_label(_("Select all lines")); gtk_menu_shell_append(GTK_MENU_SHELL(CddbPopupMenu), MenuItem); - g_signal_connect(G_OBJECT(MenuItem),"activate", G_CALLBACK(Cddb_Track_List_Select_All),NULL); + g_signal_connect(G_OBJECT(MenuItem),"activate", + G_CALLBACK(Cddb_Track_List_Select_All),NULL); MenuItem = gtk_menu_item_new_with_label(_("Unselect all lines")); gtk_menu_shell_append(GTK_MENU_SHELL(CddbPopupMenu), MenuItem); - g_signal_connect(G_OBJECT(MenuItem),"activate", G_CALLBACK(Cddb_Track_List_Unselect_All),NULL); + g_signal_connect(G_OBJECT(MenuItem),"activate", + G_CALLBACK(Cddb_Track_List_Unselect_All),NULL); MenuItem = gtk_menu_item_new_with_label(_("Invert selection")); gtk_menu_shell_append(GTK_MENU_SHELL(CddbPopupMenu), MenuItem); - g_signal_connect(G_OBJECT(MenuItem),"activate", G_CALLBACK(Cddb_Track_List_Invert_Selection),NULL); + g_signal_connect(G_OBJECT(MenuItem),"activate", + G_CALLBACK(Cddb_Track_List_Invert_Selection),NULL); MenuItem = gtk_menu_item_new(); gtk_menu_shell_append(GTK_MENU_SHELL(CddbPopupMenu), MenuItem); MenuItem = gtk_menu_item_new_with_label(_("Sort by Track Number")); gtk_menu_shell_append(GTK_MENU_SHELL(CddbPopupMenu),MenuItem); - g_signal_connect(G_OBJECT(MenuItem),"activate",G_CALLBACK(Cddb_Track_List_Sort_By_Ascending_Track_Number),NULL); + g_signal_connect(G_OBJECT(MenuItem),"activate", + G_CALLBACK(Cddb_Track_List_Sort_By_Ascending_Track_Number),NULL); MenuItem = gtk_menu_item_new_with_label(_("Sort by Track Name")); gtk_menu_shell_append(GTK_MENU_SHELL(CddbPopupMenu),MenuItem); - g_signal_connect(G_OBJECT(MenuItem),"activate",G_CALLBACK(Cddb_Track_List_Sort_By_Ascending_Track_Name),NULL); + g_signal_connect(G_OBJECT(MenuItem),"activate", + G_CALLBACK(Cddb_Track_List_Sort_By_Ascending_Track_Name),NULL); gtk_widget_show_all(CddbPopupMenu); return CddbPopupMenu; @@ -1603,7 +1607,7 @@ gint Cddb_Open_Connection (gchar *host, gint port) struct hostent *hostent; struct sockaddr_in sockaddr; gint optval = 1; - gchar *msg; + gchar *msg; if (!CddbWindow) @@ -1753,13 +1757,14 @@ gint Cddb_Write_Result_To_File (gint socket_id, gulong *bytes_read_total) gtk_main_iteration(); } + fclose(file); + if (bytes_read < 0) { Log_Print(_("Error when reading cddb response (%s)!"),g_strerror(errno)); return -1; // Error! } - fclose(file); } else { Log_Print(_("Can't create file '%s' (%s)"),file_path,g_strerror(errno)); @@ -1767,7 +1772,6 @@ gint Cddb_Write_Result_To_File (gint socket_id, gulong *bytes_read_total) g_free(file_path); g_free(home_path); - return 0; } @@ -1789,11 +1793,12 @@ gint Cddb_Write_Result_To_File (gint socket_id, gulong *bytes_read_total) */ gint Cddb_Read_Line (FILE **file, gchar **cddb_out) { - gchar buffer[MAX_STRING_LEN]; - + gchar buffer[MAX_STRING_LEN]; + gchar *result; if (*file == NULL) { + // Open the file for reading the first time gchar *home_path; gchar *file_path; @@ -1812,7 +1817,8 @@ gint Cddb_Read_Line (FILE **file, gchar **cddb_out) g_free(file_path); } - if (fgets(buffer,sizeof(buffer),*file)) + result = fgets(buffer,sizeof(buffer),*file); + if (result != NULL && result != (gchar *)EOF) { if (buffer && strlen(buffer)>0 && buffer[strlen(buffer)-1]=='\n') buffer[strlen(buffer)-1]='\0'; @@ -1821,8 +1827,9 @@ gint Cddb_Read_Line (FILE **file, gchar **cddb_out) *cddb_out = g_strdup(buffer); }else { - // On error or EOF + // On error, or EOF fclose(*file); + *file = NULL; //*cddb_out = NULL; *cddb_out = g_strdup(""); // To avoid a crash @@ -1841,6 +1848,7 @@ gint Cddb_Read_Line (FILE **file, gchar **cddb_out) gint Cddb_Read_Http_Header (FILE **file, gchar **cddb_out) { + // The 'file' is opened (if no error) in this function if ( Cddb_Read_Line(file,cddb_out) < 0 ) return -1; // Error! @@ -2291,6 +2299,8 @@ gboolean Cddb_Search_Album_List_From_String_Freedb (void) g_free(cddb_server_cgi_path); gtk_widget_set_sensitive(GTK_WIDGET(CddbStopSearchButton),FALSE); gtk_widget_set_sensitive(GTK_WIDGET(CddbStopSearchAutoButton),FALSE); + if (file) + fclose(file); return FALSE; } g_free(cddb_out); @@ -2413,6 +2423,13 @@ gboolean Cddb_Search_Album_List_From_String_Freedb (void) g_free(cddb_server_name); g_free(cddb_server_cgi_path); + // Close file opened for reading lines + if (file) + { + fclose(file); + file = NULL; + } + gtk_widget_set_sensitive(GTK_WIDGET(CddbStopSearchButton),FALSE); gtk_widget_set_sensitive(GTK_WIDGET(CddbStopSearchAutoButton),FALSE); @@ -2463,8 +2480,8 @@ gboolean Cddb_Search_Album_List_From_String_Gnudb (void) gint bytes_written; gulong bytes_read_total = 0; FILE *file; - gint num_albums = 0; - gint total_num_albums = 0; + gint num_albums = 0; + gint total_num_albums = 0; gchar *next_page = NULL; gint next_page_cpt = 0; @@ -2603,6 +2620,8 @@ gboolean Cddb_Search_Album_List_From_String_Gnudb (void) g_free(cddb_server_cgi_path); gtk_widget_set_sensitive(GTK_WIDGET(CddbStopSearchButton),FALSE); gtk_widget_set_sensitive(GTK_WIDGET(CddbStopSearchAutoButton),FALSE); + if (file) + fclose(file); return FALSE; } g_free(cddb_out); @@ -2746,6 +2765,13 @@ gboolean Cddb_Search_Album_List_From_String_Gnudb (void) g_free(cddb_server_name); g_free(cddb_server_cgi_path); + // Close file opened for reading lines + if (file) + { + fclose(file); + file = NULL; + } + // Close connection Cddb_Close_Connection(socket_id); @@ -2935,16 +2961,16 @@ gboolean Cddb_Search_Album_From_Selected_Files (void) // We check if the file corresponding to the discid exists in each directory for (i=0; i<=CddbDirSize; i++) { - FILE *file; gchar *file_path; if (!CDDB_LOCAL_PATH || strlen(CDDB_LOCAL_PATH)==0) { GtkWidget *msgbox; - msgbox = msg_box_new(_("Local CD search..."),_("The path for 'Local " - "CD Data Base' wasn't defined!\nFill it in the " - "preferences window."),GTK_STOCK_DIALOG_ERROR,BUTTON_YES,0); + msgbox = msg_box_new(_("Local CD search..."), + _("The path for 'Local CD Data Base' wasn't " + "defined!\nFill it in the preferences window."), + GTK_STOCK_DIALOG_ERROR,BUTTON_YES,0); msg_box_hide_check_button(MSG_BOX(msgbox)); msg_box_run(MSG_BOX(msgbox)); gtk_widget_destroy(msgbox); @@ -3014,8 +3040,10 @@ gboolean Cddb_Search_Album_From_Selected_Files (void) CddbAlbumList = g_list_append(CddbAlbumList,cddbalbum); - if (rc != 0) // Need to close it, if not done in Cddb_Read_Line + // Need to close it, if not done in Cddb_Read_Line + if (file) fclose(file); + file = NULL; } g_free(file_path); @@ -3138,6 +3166,8 @@ gboolean Cddb_Search_Album_From_Selected_Files (void) g_free(cddb_server_cgi_path); gtk_widget_set_sensitive(GTK_WIDGET(CddbStopSearchButton),FALSE); gtk_widget_set_sensitive(GTK_WIDGET(CddbStopSearchAutoButton),FALSE); + if (file) + fclose(file); return FALSE; } g_free(cddb_out); @@ -3222,6 +3252,13 @@ gboolean Cddb_Search_Album_From_Selected_Files (void) g_free(cddb_server_name); g_free(cddb_server_cgi_path); + // Close file opened for reading lines + if (file) + { + fclose(file); + file = NULL; + } + // Close connection Cddb_Close_Connection(socket_id); } @@ -3291,7 +3328,7 @@ gboolean Cddb_Get_Album_Tracks_List (GtkTreeSelection* selection) gchar *cddb_server_cgi_path; gint bytes_written; gulong bytes_read_total = 0; - FILE *file; + FILE *file = NULL; gboolean read_track_offset = FALSE; GtkTreeIter row; @@ -3397,6 +3434,8 @@ gboolean Cddb_Get_Album_Tracks_List (GtkTreeSelection* selection) Log_Print("%s",msg); g_free(msg); g_free(cddb_out); + if (file) + fclose(file); return FALSE; } g_free(cddb_out); @@ -3561,6 +3600,13 @@ gboolean Cddb_Get_Album_Tracks_List (GtkTreeSelection* selection) } g_free(cddb_end_str); + // Close file opened for reading lines + if (file) + { + fclose(file); + file = NULL; + } + if (cddb_server_name) { // Remote access @@ -3751,7 +3797,8 @@ gboolean Cddb_Set_Track_Infos_To_File_List (void) msg = g_strdup_printf(_("Be careful, you are applying %d lines of the CDDB " "results to %d lines in the list of files!\n\nDo you want to continue ?"), rows_to_loop,file_selectedcount); - msgbox = msg_box_new(_("Write Tag from CDDB..."),msg,GTK_STOCK_DIALOG_QUESTION,BUTTON_NO,BUTTON_YES,0); + msgbox = msg_box_new(_("Write Tag from CDDB..."),msg, + GTK_STOCK_DIALOG_QUESTION,BUTTON_NO,BUTTON_YES,0); msg_box_hide_check_button(MSG_BOX(msgbox)); button = msg_box_run(MSG_BOX(msgbox)); gtk_widget_destroy(msgbox); @@ -3760,6 +3807,7 @@ gboolean Cddb_Set_Track_Infos_To_File_List (void) { g_list_foreach(file_iterlist, (GFunc)g_free, NULL); g_list_free(file_iterlist); + //gdk_window_raise(CddbWindow->window); return FALSE; } } diff --git a/src/easytag.c b/src/easytag.c index 2b26967..6a3bd4e 100644 --- a/src/easytag.c +++ b/src/easytag.c @@ -60,7 +60,7 @@ # include "win32/win32dep.h" #endif -#include "../pixmaps/EasyTAG.xpm" +#include "../pixmaps/EasyTAG_icon.xpm" /**************** @@ -140,10 +140,10 @@ int main (int argc, char *argv[]) { GtkWidget *MainVBox; GtkWidget *HBox, *VBox; - GdkPixmap *pixmap; - GdkBitmap *mask; gboolean created_settings; struct stat statbuf; + GdkPixmap *pixmap; + GdkBitmap *mask; #ifdef WIN32 @@ -316,7 +316,7 @@ int main (int argc, char *argv[]) /* Minimised window icon */ gtk_widget_realize(MainWindow); - pixmap = gdk_pixmap_create_from_xpm_d(MainWindow->window,&mask,NULL,EasyTAG_xpm); + pixmap = gdk_pixmap_create_from_xpm_d(MainWindow->window,&mask,NULL,EasyTAG_icon_xpm); gdk_window_set_icon(MainWindow->window,(GdkWindow *)NULL,pixmap,mask); @@ -1038,18 +1038,18 @@ GtkWidget *Create_Tag_Area (void) hbox = gtk_hbox_new(FALSE, 4); gtk_table_attach(GTK_TABLE(Table),hbox,1,4,1,2,GTK_FILL,GTK_FILL,TablePadding,TablePadding); - PictureClearButton = gtk_button_new(); - Icon = gtk_image_new_from_stock(GTK_STOCK_REMOVE, GTK_ICON_SIZE_SMALL_TOOLBAR); - gtk_container_add(GTK_CONTAINER(PictureClearButton),Icon); - gtk_box_pack_start(GTK_BOX(hbox),PictureClearButton,FALSE,FALSE,0); - gtk_tooltips_set_tip(Tips,PictureClearButton,_("Remove selected pictures, else all pictures."),NULL); - PictureAddButton = gtk_button_new(); Icon = gtk_image_new_from_stock(GTK_STOCK_ADD, GTK_ICON_SIZE_SMALL_TOOLBAR); gtk_container_add(GTK_CONTAINER(PictureAddButton),Icon); gtk_box_pack_start(GTK_BOX(hbox),PictureAddButton,FALSE,FALSE,0); gtk_tooltips_set_tip(Tips,PictureAddButton,_("Add pictures to the tag (drag and drop is also available)."),NULL); + PictureClearButton = gtk_button_new(); + Icon = gtk_image_new_from_stock(GTK_STOCK_REMOVE, GTK_ICON_SIZE_SMALL_TOOLBAR); + gtk_container_add(GTK_CONTAINER(PictureClearButton),Icon); + gtk_box_pack_start(GTK_BOX(hbox),PictureClearButton,FALSE,FALSE,0); + gtk_tooltips_set_tip(Tips,PictureClearButton,_("Remove selected pictures, else all pictures."),NULL); + Label = gtk_label_new(" "); gtk_box_pack_start(GTK_BOX(hbox),Label,FALSE,FALSE,0); @@ -3097,7 +3097,7 @@ void Action_Select_Browser_Style (void) #include #include #include -void Read_Directory (gchar *path_real) +gboolean Read_Directory (gchar *path_real) { DIR *dir; gchar *msg; @@ -3110,7 +3110,8 @@ void Read_Directory (gchar *path_real) GtkAction *uiaction; GtkWidget *TBViewMode; - if (!path_real) return; + if (!path_real) + return FALSE; ReadingDirectory = TRUE; /* A flag to avoid to start an other reading */ @@ -3138,6 +3139,7 @@ void Read_Directory (gchar *path_real) /* Placed only here, to empty the previous list of files */ if ((dir=opendir(path_real)) == NULL) { + // Message if the directory doesn't exist... GtkWidget *msgbox; gchar *path_utf8 = filename_to_display(path_real); gchar *msg; @@ -3150,8 +3152,10 @@ void Read_Directory (gchar *path_real) msg_box_hide_check_button(MSG_BOX(msgbox)); msg_box_run(MSG_BOX(msgbox)); gtk_widget_destroy(msgbox); + ReadingDirectory = FALSE; //Allow a new reading - return; + Browser_Area_Set_Sensitive(TRUE); + return FALSE; } closedir(dir); @@ -3266,6 +3270,8 @@ void Read_Directory (gchar *path_real) g_free(msg); Set_Unbusy_Cursor(); ReadingDirectory = FALSE; + + return TRUE; } @@ -4173,7 +4179,7 @@ void Convert_Insert_Space (GtkWidget *entry) strncpy(string,gtk_entry_get_text(GTK_ENTRY(entry)),string_length); string[string_length]='\0'; - Scan_Process_Fields_Insert_Space(string); + Scan_Process_Fields_Insert_Space(&string); gtk_entry_set_text(GTK_ENTRY(entry),string); g_free(string); } @@ -4463,6 +4469,13 @@ gchar *signal_to_string (gint signal) */ void Display_Usage (void) { + // Fix from Steve Ralston for gcc-3.2.2 +#ifdef WIN32 + #define xPREFIX "c:" +#else + #define xPREFIX "" +#endif + g_print(_("\nUsage: easytag [option] " "\n or: easytag [directory]\n" "\n" @@ -4473,13 +4486,12 @@ void Display_Usage (void) "\n" "Directory:\n" "----------\n" -#ifdef WIN32 - "c:/path_to/files Use an absolute path to load,\n" -#else - "/path_to/files Use an absolute path to load,\n" -#endif + "%s/path_to/files Use an absolute path to load,\n" "path_to/files Use a relative path.\n" - "\n")); + "\n"),xPREFIX); + + #undef xPREFIX + exit(0); } @@ -4535,8 +4547,8 @@ void Quit_MainWindow (void) if (ET_Check_If_All_Files_Are_Saved() != TRUE) { /* Some files haven't been saved */ - msgbox = msg_box_new(_("Confirm..."),_("Some files have been modified but not " - "saved...\nDo you want to save them before exiting the program?"), + msgbox = msg_box_new(_("Confirm..."),_("Some files have been modified but " + "not saved...\nDo you want to save them before exiting the program?"), GTK_STOCK_DIALOG_QUESTION,BUTTON_CANCEL,BUTTON_NO,BUTTON_YES,0); msg_box_hide_check_button(MSG_BOX(msgbox)); button = msg_box_run(MSG_BOX(msgbox)); diff --git a/src/easytag.h b/src/easytag.h old mode 100755 new mode 100644 index 1b4fdd1..9823c75 --- a/src/easytag.h +++ b/src/easytag.h @@ -192,7 +192,7 @@ void File_Area_Set_Sensitive (gboolean activate); void Tag_Area_Set_Sensitive (gboolean activate); void Tag_Area_Display_Controls (ET_File *ETFile); -void Read_Directory (gchar *path); +gboolean Read_Directory (gchar *path); void Quit_MainWindow (void); void MainWindow_Apply_Changes (void); void Update_Command_Buttons_Sensivity (void); diff --git a/src/et_core.c b/src/et_core.c old mode 100755 new mode 100644 diff --git a/src/et_core.h b/src/et_core.h old mode 100755 new mode 100644 index ccc7f76..6836656 --- a/src/et_core.h +++ b/src/et_core.h @@ -242,6 +242,7 @@ static const ET_File_Description ETFileDescription[] = #endif #ifdef ENABLE_OGG {OGG_FILE, ".ogg", OGG_TAG}, + {OGG_FILE, ".oga", OGG_TAG}, #endif #ifdef ENABLE_SPEEX {SPEEX_FILE, ".spx", OGG_TAG}, // Implemented by Pierre Dumuid diff --git a/src/id3_tag.c b/src/id3_tag.c old mode 100755 new mode 100644 diff --git a/src/id3lib/Makefile.in b/src/id3lib/Makefile.in index 6eea830..9e89aa5 100644 --- a/src/id3lib/Makefile.in +++ b/src/id3lib/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -14,15 +14,11 @@ @SET_MAKE@ -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -51,33 +47,33 @@ libid3bugfix_a_AR = $(AR) $(ARFLAGS) libid3bugfix_a_LIBADD = am_libid3bugfix_a_OBJECTS = c_wrapper.$(OBJEXT) libid3bugfix_a_OBJECTS = $(am_libid3bugfix_a_OBJECTS) -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) +DEFAULT_INCLUDES = -I. -I$(top_builddir)@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) -CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \ - $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) -LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ SOURCES = $(libid3bugfix_a_SOURCES) DIST_SOURCES = $(libid3bugfix_a_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ @@ -115,8 +111,10 @@ GLIB_MKENUMS = @GLIB_MKENUMS@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ +GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ @@ -130,11 +128,11 @@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ -MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ -MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ +MSGFMT_OPTS = @MSGFMT_OPTS@ OBJEXT = @OBJEXT@ OGG_CFLAGS = @OGG_CFLAGS@ OGG_LIBS = @OGG_LIBS@ @@ -162,17 +160,13 @@ VORBIS_LIBS = @VORBIS_LIBS@ WAVPACK_CFLAGS = @WAVPACK_CFLAGS@ WAVPACK_LIBS = @WAVPACK_LIBS@ XGETTEXT = @XGETTEXT@ -ac_ct_AR = @ac_ct_AR@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ -ac_ct_RANLIB = @ac_ct_RANLIB@ -ac_ct_STRIP = @ac_ct_STRIP@ -ac_pt_PKG_CONFIG = @ac_pt_PKG_CONFIG@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ @@ -184,28 +178,39 @@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ +htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ +localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ +psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ noinst_LIBRARIES = libid3bugfix.a INCLUDES = -DLOCALE=\"$(localedir)\" EXTRA_DIST = \ @@ -265,22 +270,22 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/c_wrapper.Po@am__quote@ .cpp.o: -@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: -@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: -@am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< @@ -291,10 +296,6 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs -distclean-libtool: - -rm -f libtool -uninstall-info-am: - ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ @@ -344,22 +345,21 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -407,7 +407,7 @@ distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ - distclean-libtool distclean-tags + distclean-tags dvi: dvi-am @@ -421,12 +421,20 @@ info-am: install-data-am: +install-dvi: install-dvi-am + install-exec-am: +install-html: install-html-am + install-info: install-info-am install-man: +install-pdf: install-pdf-am + +install-ps: install-ps-am + installcheck-am: maintainer-clean: maintainer-clean-am @@ -447,19 +455,22 @@ ps: ps-am ps-am: -uninstall-am: uninstall-info-am +uninstall-am: + +.MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLIBRARIES ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am install-exec \ - install-exec-am install-info install-info-am install-man \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ - pdf pdf-am ps ps-am tags uninstall uninstall-am \ - uninstall-info-am + pdf pdf-am ps ps-am tags uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff --git a/src/id3v24_tag.c b/src/id3v24_tag.c old mode 100755 new mode 100644 index d15bfec..d1302ca --- a/src/id3v24_tag.c +++ b/src/id3v24_tag.c @@ -79,8 +79,8 @@ static int libid3tag_Get_Frame_Str (const struct id3_frame *frame, unsigned static void Id3tag_delete_frames (struct id3_tag *tag, const gchar *name, int start); static void Id3tag_delete_txxframes (struct id3_tag *tag, const gchar *param1, int start); -static struct id3_frame *Id3tag_findncreate_frame (struct id3_tag *tag, const gchar *name); -static struct id3_frame *Id3tag_findncreate_txxframe (struct id3_tag *tag, const gchar *param1); +static struct id3_frame *Id3tag_find_and_create_frame (struct id3_tag *tag, const gchar *name); +static struct id3_frame *Id3tag_find_and_create_txxframe (struct id3_tag *tag, const gchar *param1); static int id3taglib_set_field (struct id3_frame *frame, const gchar *str, enum id3_field_type type, int num, int clear, int id3v1); static int etag_set_tags (const gchar *str, const char *frame_name, enum id3_field_type field_type, struct id3_tag *v1tag, struct id3_tag *v2tag, gboolean *strip_tags); static int etag_write_tags (const gchar *filename, const struct id3_tag *v1tag, const struct id3_tag *v2tag, gboolean strip_tags); @@ -359,21 +359,24 @@ gboolean Id3tag_Read_File_Tag (gchar *filename, File_Tag *FileTag) if ( (frame = id3_tag_findframe(tag, "WXXX", 0)) ) update |= libid3tag_Get_Frame_Str(frame, EASYTAG_ID3_FIELD_LATIN1, &FileTag->url); - /********************* - * Encoded by (TENC) * - *********************/ + /******************************* + * Encoded by (TENC) or (TXXX) * + *******************************/ if ( (frame = id3_tag_findframe(tag, "TENC", 0)) ) update |= libid3tag_Get_Frame_Str(frame, ~0, &FileTag->encoded_by); + /* Encoded by in TXXX frames */ string1 = NULL; for (i = 0; (frame = id3_tag_findframe(tag, "TXX", i)); i++) { + // Do nothing if already read... if (FileTag->encoded_by) break; + tmpupdate = libid3tag_Get_Frame_Str(frame, ~0, &string1); if (string1) { - if (strcasestr(string1, EASYTAG_STRING_ENCODEDBY MULTIFIELD_SEPARATOR) == string1) + if (strncasecmp(string1, EASYTAG_STRING_ENCODEDBY MULTIFIELD_SEPARATOR, strlen(EASYTAG_STRING_ENCODEDBY MULTIFIELD_SEPARATOR)) == 0) { FileTag->encoded_by = g_strdup(&string1[sizeof(EASYTAG_STRING_ENCODEDBY) + sizeof(MULTIFIELD_SEPARATOR) - 2]); g_free(string1); @@ -937,13 +940,15 @@ gboolean Id3tag_Write_File_v24Tag (ET_File *ETFile) /*************** * Encoded by * ***************/ - if ( v2tag && FileTag->encoded_by && *FileTag->encoded_by - && (frame = Id3tag_findncreate_txxframe(v2tag, EASYTAG_STRING_ENCODEDBY))) - { - id3taglib_set_field(frame, EASYTAG_STRING_ENCODEDBY, ID3_FIELD_TYPE_STRING, 0, 1, 0); - id3taglib_set_field(frame, FileTag->encoded_by, ID3_FIELD_TYPE_STRING, 1, 0, 0); - strip_tags = FALSE; - }else + //if ( v2tag && FileTag->encoded_by && *FileTag->encoded_by + //&& (frame = Id3tag_find_and_create_txxframe(v2tag, EASYTAG_STRING_ENCODEDBY))) + //{ + // id3taglib_set_field(frame, EASYTAG_STRING_ENCODEDBY, ID3_FIELD_TYPE_STRING, 0, 1, 0); + // id3taglib_set_field(frame, FileTag->encoded_by, ID3_FIELD_TYPE_STRING, 1, 0, 0); + // strip_tags = FALSE; + //}else + // Save encoder name in TENC frame instead of the TXX frame + etag_set_tags(FileTag->encoded_by, "TENC", ID3_FIELD_TYPE_STRINGLIST, NULL, v2tag, &strip_tags); if (v2tag) Id3tag_delete_txxframes(v2tag, EASYTAG_STRING_ENCODEDBY, 0); @@ -1062,7 +1067,7 @@ Id3tag_delete_txxframes(struct id3_tag *tag, const gchar *param1, int start) { str = NULL; if ((str = (gchar *)id3_ucs4_latin1duplicate(ucs4string)) - && (strcasestr(str, param1) == str) ) + && (strncasecmp(str, param1, strlen(param1)) == 0) ) { g_free(str); id3_tag_detachframe(tag, frame); @@ -1080,7 +1085,7 @@ Id3tag_delete_txxframes(struct id3_tag *tag, const gchar *param1, int start) * create new if not found */ static struct id3_frame * -Id3tag_findncreate_frame(struct id3_tag *tag, const gchar *name) +Id3tag_find_and_create_frame (struct id3_tag *tag, const gchar *name) { struct id3_frame *frame; @@ -1103,7 +1108,7 @@ Id3tag_findncreate_frame(struct id3_tag *tag, const gchar *name) * create new if not found */ static struct id3_frame * -Id3tag_findncreate_txxframe(struct id3_tag *tag, const gchar *param1) +Id3tag_find_and_create_txxframe(struct id3_tag *tag, const gchar *param1) { const id3_ucs4_t *ucs4string; struct id3_frame *frame; @@ -1120,7 +1125,7 @@ Id3tag_findncreate_txxframe(struct id3_tag *tag, const gchar *param1) { str = NULL; if ((str = (gchar *)id3_ucs4_latin1duplicate(ucs4string)) - && (strcasestr(str, param1) == str) ) + && (strncasecmp(str, param1, strlen(param1)) == 0) ) { g_free(str); break; @@ -1320,10 +1325,10 @@ etag_set_tags(const gchar *str, *strip_tags = FALSE; if (v2tag - && (ftmp = Id3tag_findncreate_frame(v2tag, frame_name))) + && (ftmp = Id3tag_find_and_create_frame(v2tag, frame_name))) id3taglib_set_field(ftmp, str, field_type, 0, 1, 0); if (v1tag - && (ftmp = Id3tag_findncreate_frame(v1tag, frame_name))) + && (ftmp = Id3tag_find_and_create_frame(v1tag, frame_name))) id3taglib_set_field(ftmp, str, field_type, 0, 1, 1); }else if (v2tag) diff --git a/src/libapetag/Makefile.in b/src/libapetag/Makefile.in index 68858ad..1c5dda8 100644 --- a/src/libapetag/Makefile.in +++ b/src/libapetag/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -14,15 +14,11 @@ @SET_MAKE@ -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -52,25 +48,24 @@ libapetag_a_LIBADD = am_libapetag_a_OBJECTS = apetaglib.$(OBJEXT) is_tag.$(OBJEXT) \ info_mac.$(OBJEXT) info_mpc.$(OBJEXT) libapetag_a_OBJECTS = $(am_libapetag_a_OBJECTS) -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) +DEFAULT_INCLUDES = -I. -I$(top_builddir)@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) -LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ SOURCES = $(libapetag_a_SOURCES) DIST_SOURCES = $(libapetag_a_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ @@ -108,8 +103,10 @@ GLIB_MKENUMS = @GLIB_MKENUMS@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ +GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ @@ -123,11 +120,11 @@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ -MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ -MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ +MSGFMT_OPTS = @MSGFMT_OPTS@ OBJEXT = @OBJEXT@ OGG_CFLAGS = @OGG_CFLAGS@ OGG_LIBS = @OGG_LIBS@ @@ -155,17 +152,13 @@ VORBIS_LIBS = @VORBIS_LIBS@ WAVPACK_CFLAGS = @WAVPACK_CFLAGS@ WAVPACK_LIBS = @WAVPACK_LIBS@ XGETTEXT = @XGETTEXT@ -ac_ct_AR = @ac_ct_AR@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ -ac_ct_RANLIB = @ac_ct_RANLIB@ -ac_ct_STRIP = @ac_ct_STRIP@ -ac_pt_PKG_CONFIG = @ac_pt_PKG_CONFIG@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ @@ -177,28 +170,39 @@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ +htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ +localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ +psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ noinst_LIBRARIES = libapetag.a INCLUDES = -DLOCALE=\"$(localedir)\" libapetag_a_SOURCES = \ @@ -270,22 +274,22 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/is_tag.Po@am__quote@ .c.o: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: -@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< @@ -296,10 +300,6 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs -distclean-libtool: - -rm -f libtool -uninstall-info-am: - ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ @@ -349,22 +349,21 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -412,7 +411,7 @@ distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ - distclean-libtool distclean-tags + distclean-tags dvi: dvi-am @@ -426,12 +425,20 @@ info-am: install-data-am: +install-dvi: install-dvi-am + install-exec-am: +install-html: install-html-am + install-info: install-info-am install-man: +install-pdf: install-pdf-am + +install-ps: install-ps-am + installcheck-am: maintainer-clean: maintainer-clean-am @@ -452,19 +459,22 @@ ps: ps-am ps-am: -uninstall-am: uninstall-info-am +uninstall-am: + +.MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLIBRARIES ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am install-exec \ - install-exec-am install-info install-info-am install-man \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ - pdf pdf-am ps ps-am tags uninstall uninstall-am \ - uninstall-info-am + pdf pdf-am ps ps-am tags uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff --git a/src/libmpg123/Makefile.in b/src/libmpg123/Makefile.in index 203fdc7..801b487 100644 --- a/src/libmpg123/Makefile.in +++ b/src/libmpg123/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -14,15 +14,11 @@ @SET_MAKE@ -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -53,25 +49,24 @@ am_libmpg123_a_OBJECTS = common.$(OBJEXT) dxhead.$(OBJEXT) \ getbits.$(OBJEXT) layer1.$(OBJEXT) layer2.$(OBJEXT) \ layer3.$(OBJEXT) mpg123.$(OBJEXT) libmpg123_a_OBJECTS = $(am_libmpg123_a_OBJECTS) -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) +DEFAULT_INCLUDES = -I. -I$(top_builddir)@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) -LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ SOURCES = $(libmpg123_a_SOURCES) DIST_SOURCES = $(libmpg123_a_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ @@ -109,8 +104,10 @@ GLIB_MKENUMS = @GLIB_MKENUMS@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ +GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ @@ -124,11 +121,11 @@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ -MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ -MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ +MSGFMT_OPTS = @MSGFMT_OPTS@ OBJEXT = @OBJEXT@ OGG_CFLAGS = @OGG_CFLAGS@ OGG_LIBS = @OGG_LIBS@ @@ -156,17 +153,13 @@ VORBIS_LIBS = @VORBIS_LIBS@ WAVPACK_CFLAGS = @WAVPACK_CFLAGS@ WAVPACK_LIBS = @WAVPACK_LIBS@ XGETTEXT = @XGETTEXT@ -ac_ct_AR = @ac_ct_AR@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ -ac_ct_RANLIB = @ac_ct_RANLIB@ -ac_ct_STRIP = @ac_ct_STRIP@ -ac_pt_PKG_CONFIG = @ac_pt_PKG_CONFIG@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ @@ -178,28 +171,39 @@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ +htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ +localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ +psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ noinst_LIBRARIES = libmpg123.a INCLUDES = -DLOCALE=\"$(localedir)\" libmpg123_a_SOURCES = \ @@ -275,22 +279,22 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mpg123.Po@am__quote@ .c.o: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: -@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< @@ -301,10 +305,6 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs -distclean-libtool: - -rm -f libtool -uninstall-info-am: - ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ @@ -354,22 +354,21 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -417,7 +416,7 @@ distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ - distclean-libtool distclean-tags + distclean-tags dvi: dvi-am @@ -431,12 +430,20 @@ info-am: install-data-am: +install-dvi: install-dvi-am + install-exec-am: +install-html: install-html-am + install-info: install-info-am install-man: +install-pdf: install-pdf-am + +install-ps: install-ps-am + installcheck-am: maintainer-clean: maintainer-clean-am @@ -457,19 +464,22 @@ ps: ps-am ps-am: -uninstall-am: uninstall-info-am +uninstall-am: + +.MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLIBRARIES ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am install-exec \ - install-exec-am install-info install-info-am install-man \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ - pdf pdf-am ps ps-am tags uninstall uninstall-am \ - uninstall-info-am + pdf pdf-am ps ps-am tags uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff --git a/src/log.c b/src/log.c old mode 100755 new mode 100644 index 0dfc39b..155d753 --- a/src/log.c +++ b/src/log.c @@ -28,6 +28,7 @@ #include "log.h" #include "easytag.h" #include "bar.h" +#include "setting.h" #ifdef WIN32 # include "win32/win32dep.h" @@ -41,6 +42,7 @@ GtkWidget *LogList = NULL; GtkListStore *logListModel; GList *LogPrintTmpList = NULL; // Temporary list to store messages for the LogList when this control wasn't yet created +gint LogListNbrRows; enum { @@ -142,8 +144,9 @@ GtkWidget *Create_Log_Area (void) // Load pending messages in the Log list Log_Print_Tmp_List(); - //gtk_widget_show_all(ScrollWindowLogList); - gtk_widget_show_all(Frame); + if (SHOW_LOG_VIEW) + //gtk_widget_show_all(ScrollWindowLogList); + gtk_widget_show_all(Frame); //return ScrollWindowLogList; return Frame; @@ -190,7 +193,10 @@ void Log_List_Set_Row_Visible (GtkTreeModel *treeModel, GtkTreeIter *rowIter) void Log_Clean_Log_List (void) { if (logListModel) + { gtk_list_store_clear(logListModel); + LogListNbrRows = 0; + } } @@ -236,6 +242,15 @@ void Log_Print (gchar const *format, ...) if (LogList && logListModel) { gchar *time = Log_Format_Date(); + + // Remove lines that exceed the limit + if (LogListNbrRows > LOG_MAX_LINES - 1 + && gtk_tree_model_get_iter_first(GTK_TREE_MODEL(logListModel), &iter)) + { + gtk_list_store_remove(GTK_LIST_STORE(logListModel), &iter); + } + + LogListNbrRows++; gtk_list_store_append(logListModel, &iter); gtk_list_store_set(logListModel, &iter, LOG_TIME_TEXT, time, @@ -296,6 +311,7 @@ void Log_Print_Tmp_List (void) if (LogList && logListModel) { + LogListNbrRows++; gtk_list_store_append(logListModel, &iter); gtk_list_store_set(logListModel, &iter, LOG_TIME_TEXT, ((Log_Data *)LogPrintTmpList->data)->time, diff --git a/src/misc.c b/src/misc.c old mode 100755 new mode 100644 index 41f12ec..9346abe --- a/src/misc.c +++ b/src/misc.c @@ -173,12 +173,15 @@ void Button_Load_Set_Sensivity (GtkWidget *button, GtkWidget *entry GtkWidget *Create_Load_Filename_Popup_Menu (GtkWidget *list); void Load_Filename_List_Insert_Blank_Line (GtkWidget *list); void Load_Filename_List_Delete_Line (GtkWidget *list); +void Load_Filename_List_Move_Up (GtkWidget *list); +void Load_Filename_List_Move_Down (GtkWidget *list); void Load_Filename_List_Delete_All_Blank_Lines (GtkWidget *list); void Load_Filename_List_Reload (GtkWidget *list); void Load_Filename_Update_Text_Line (GtkWidget *entry, GtkWidget *list); void Load_Filename_Edit_Text_Line (GtkTreeSelection *selection, gpointer data); -void Create_Xpm_Icon_Factory (const char **xpmdata, const char *name); +void Create_Xpm_Icon_Factory (const char **xpm_data, const char *name_in_factory); +void Create_Png_Icon_Factory (const char *png_file, const char *name_in_factory); /* Browser */ static void Open_File_Selection_Window (GtkWidget *entry, gchar *title, GtkFileChooserAction action); @@ -684,8 +687,8 @@ void Set_Unbusy_Cursor (void) #include "../pixmaps/forbidden.xpm" #include "../pixmaps/read_only.xpm" //#include "../pixmaps/sequence_track.xpm" -#include "../pixmaps/red_lines.xpm" #include "../pixmaps/artist_album.xpm" +#include "../pixmaps/red_lines.xpm" #include "../pixmaps/add_folder.xpm" #include "../pixmaps/parent_folder.xpm" #include "../pixmaps/sound.xpm" @@ -697,6 +700,7 @@ void Init_Custom_Icons (void) { Create_Xpm_Icon_Factory((const char**)select_all_xpm, "easytag-select-all"); Create_Xpm_Icon_Factory((const char**)scan_xpm, "easytag-scan"); + ////Create_Png_Icon_Factory("scan.png", "easytag-scan"); Create_Xpm_Icon_Factory((const char**)invert_selection_xpm, "easytag-invert-selection"); Create_Xpm_Icon_Factory((const char**)add_xpm, "easytag-add"); Create_Xpm_Icon_Factory((const char**)unselect_all_xpm, "easytag-unselect-all"); @@ -708,6 +712,7 @@ void Init_Custom_Icons (void) //Create_Xpm_Icon_Factory((const char**)sequence_track_xpm, "easytag-sequence-track"); Create_Xpm_Icon_Factory((const char**)red_lines_xpm, "easytag-red-lines"); Create_Xpm_Icon_Factory((const char**)artist_album_xpm, "easytag-artist-album"); + ////Create_Png_Icon_Factory("artist_album.png", "easytag-artist-album"); Create_Xpm_Icon_Factory((const char**)parent_folder_xpm, "easytag-parent-folder"); Create_Xpm_Icon_Factory((const char**)add_folder_xpm, "easytag-add-folder"); Create_Xpm_Icon_Factory((const char**)sound_xpm, "easytag-sound"); @@ -722,22 +727,62 @@ void Init_Custom_Icons (void) * Create an icon factory from the specified pixmap * Also add it to the GTK stock images */ -void Create_Xpm_Icon_Factory (const char **xpmdata, const char *xpmname) +void Create_Xpm_Icon_Factory (const char **xpm_data, const char *name_in_factory) { - GtkIconSet *set; - GtkIconFactory *factory; - GdkPixbuf *pixbuf; + GtkIconSet *icon; + GtkIconFactory *factory; + GdkPixbuf *pixbuf; - if (!*xpmdata || !xpmname) + if (!*xpm_data || !name_in_factory) return; - pixbuf = gdk_pixbuf_new_from_xpm_data(xpmdata); + pixbuf = gdk_pixbuf_new_from_xpm_data(xpm_data); - set = gtk_icon_set_new_from_pixbuf(pixbuf); - factory = gtk_icon_factory_new(); - gtk_icon_factory_add(factory, xpmname, set); - gtk_icon_set_unref(set); - gtk_icon_factory_add_default(factory); + if (pixbuf) + { + icon = gtk_icon_set_new_from_pixbuf(pixbuf); + g_object_unref(G_OBJECT(pixbuf)); + + factory = gtk_icon_factory_new(); + gtk_icon_factory_add(factory, name_in_factory, icon); + gtk_icon_set_unref(icon); + gtk_icon_factory_add_default(factory); + } +} + +/* + * Create an icon factory from the specified png file + * Also add it to the GTK stock images + */ +void Create_Png_Icon_Factory (const char *png_file, const char *name_in_factory) +{ + GdkPixbuf *pixbuf; + GtkIconSet *icon; + GtkIconFactory *factory; + gchar *path; + GError *error = NULL; + + if (!*png_file || !name_in_factory) + return; + + path = g_strconcat(PACKAGE_DATA_DIR,"/",png_file,NULL); + pixbuf = gdk_pixbuf_new_from_file(path,&error); + g_free(path); + + if (pixbuf) + { + icon = gtk_icon_set_new_from_pixbuf(pixbuf); + g_object_unref(G_OBJECT(pixbuf)); + + factory = gtk_icon_factory_new(); + gtk_icon_factory_add(factory, name_in_factory, icon); + gtk_icon_set_unref(icon); + gtk_icon_factory_add_default(factory); + }else + { + Log_Print(error->message); + g_error_free(error); + } } /* @@ -1443,7 +1488,7 @@ void Open_Write_Playlist_Window (void) gtk_box_set_spacing(GTK_BOX(ButtonBox), 10); /* Button to Cancel */ - Button = Create_Button_With_Pixmap(BUTTON_CLOSE); + Button = gtk_button_new_from_stock(GTK_STOCK_CLOSE); gtk_container_add(GTK_CONTAINER(ButtonBox),Button); GTK_WIDGET_SET_FLAGS(Button, GTK_CAN_DEFAULT); gtk_widget_grab_default(Button); @@ -1468,10 +1513,6 @@ void Destroy_Write_Playlist_Window (void) { if (WritePlaylistWindow) { - /* Save combobox history lists before exit */ - Save_Play_List_Name_List(PlayListNameMaskModel, MISC_COMBO_TEXT); - Save_Playlist_Content_Mask_List(PlayListContentMaskModel, MISC_COMBO_TEXT); - Write_Playlist_Window_Apply_Changes(); gtk_widget_destroy(WritePlaylistWindow); @@ -1515,8 +1556,13 @@ void Write_Playlist_Window_Apply_Changes (void) PLAYLIST_CONTENT_NONE = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(playlist_content_none)); PLAYLIST_CONTENT_FILENAME = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(playlist_content_filename)); PLAYLIST_CONTENT_MASK = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(playlist_content_mask)); + if (PLAYLIST_CONTENT_MASK_VALUE) g_free(PLAYLIST_CONTENT_MASK_VALUE); PLAYLIST_CONTENT_MASK_VALUE = g_strdup(gtk_entry_get_text(GTK_ENTRY(GTK_BIN(PlayListContentMaskCombo)->child))); + + /* Save combobox history lists before exit */ + Save_Play_List_Name_List(PlayListNameMaskModel, MISC_COMBO_TEXT); + Save_Playlist_Content_Mask_List(PlayListContentMaskModel, MISC_COMBO_TEXT); } } @@ -2189,7 +2235,7 @@ void Open_Search_File_Window (void) "changed", G_CALLBACK(Search_Result_List_Row_Selected), NULL); // Button to run the search - Button = Create_Button_With_Pixmap(BUTTON_SEARCH); + Button = gtk_button_new_from_stock(GTK_STOCK_FIND); gtk_table_attach(GTK_TABLE(Table),Button,5,6,0,1,GTK_FILL,GTK_FILL,0,0); GTK_WIDGET_SET_FLAGS(Button,GTK_CAN_DEFAULT); gtk_widget_grab_default(Button); @@ -2197,7 +2243,7 @@ void Open_Search_File_Window (void) g_signal_connect(G_OBJECT(GTK_BIN(SearchStringCombo)->child),"activate", G_CALLBACK(Search_File),NULL); // Button to cancel - Button = Create_Button_With_Pixmap(BUTTON_CLOSE); + Button = gtk_button_new_from_stock(GTK_STOCK_CLOSE); gtk_table_attach(GTK_TABLE(Table),Button,5,6,1,2,GTK_FILL,GTK_FILL,0,0); g_signal_connect(G_OBJECT(Button),"clicked", G_CALLBACK(Destroy_Search_File_Window),NULL); @@ -2670,6 +2716,7 @@ void Open_Load_Filename_Window (void) GtkWidget *Label; GtkWidget *ButtonBox; GtkWidget *Button; + GtkWidget *Icon; GtkWidget *Entry; GtkWidget *ButtonLoad; GtkWidget *Separator; @@ -2746,38 +2793,104 @@ void Open_Load_Filename_Window (void) Separator = gtk_hseparator_new(); gtk_box_pack_start(GTK_BOX(VBox),Separator,FALSE,FALSE,0); + // + // Vbox for loaded files + // loadedvbox = gtk_vbox_new(FALSE, 4); - // Label of file content - Label = gtk_label_new(_("Loaded File Content :")); - gtk_box_pack_start(GTK_BOX(loadedvbox), Label, FALSE, FALSE, 0); - // Content of the loaded file ScrollWindow = gtk_scrolled_window_new(NULL,NULL); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(ScrollWindow),GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC); gtk_widget_set_size_request(GTK_WIDGET(ScrollWindow), 250, 200); + gtk_box_pack_start(GTK_BOX(loadedvbox), ScrollWindow, TRUE, TRUE, 0); LoadFileContentListModel = gtk_list_store_new(LOAD_FILE_CONTENT_COUNT, G_TYPE_STRING); LoadFileContentList = gtk_tree_view_new_with_model(GTK_TREE_MODEL(LoadFileContentListModel)); + renderer = gtk_cell_renderer_text_new(); - column = gtk_tree_view_column_new_with_attributes("", - renderer, "text", LOAD_FILE_CONTENT_TEXT, NULL); + column = gtk_tree_view_column_new_with_attributes(_("Content of TXT file"), + renderer, "text", LOAD_FILE_CONTENT_TEXT, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(LoadFileContentList), column); - gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(LoadFileContentList), FALSE); + gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(LoadFileContentList), TRUE); + //gtk_tree_selection_set_mode(gtk_tree_view_get_selection(GTK_TREE_VIEW(LoadFileContentList)),GTK_SELECTION_MULTIPLE); + gtk_tree_view_set_reorderable(GTK_TREE_VIEW(LoadFileContentList),TRUE); gtk_container_add(GTK_CONTAINER(ScrollWindow),LoadFileContentList); - gtk_box_pack_start(GTK_BOX(loadedvbox), ScrollWindow, TRUE, TRUE, 0); // Signal to automatically load the file g_signal_connect_swapped(G_OBJECT(ButtonLoad),"clicked", G_CALLBACK(Load_File_Content), G_OBJECT(GTK_BIN(FileToLoadCombo)->child)); g_signal_connect(G_OBJECT(LoadFileContentList),"key-press-event", G_CALLBACK(Load_Filename_List_Key_Press),NULL); + // Commands (like the popup menu) + hbox = gtk_hbox_new(FALSE,4); + gtk_box_pack_start(GTK_BOX(loadedvbox),hbox,FALSE,FALSE,0); + + Button = gtk_button_new(); + Icon = gtk_image_new_from_stock(GTK_STOCK_ADD,GTK_ICON_SIZE_SMALL_TOOLBAR); + gtk_container_add(GTK_CONTAINER(Button),Icon); + gtk_box_pack_start(GTK_BOX(hbox),Button,FALSE,FALSE,0); + //gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE); + gtk_tooltips_set_tip(Tips,Button,_("Insert a blank line before the selected line"),NULL); + g_signal_connect_swapped(G_OBJECT(Button),"clicked", + G_CALLBACK(Load_Filename_List_Insert_Blank_Line), G_OBJECT(LoadFileContentList)); + + Button = gtk_button_new(); + Icon = gtk_image_new_from_stock(GTK_STOCK_REMOVE,GTK_ICON_SIZE_SMALL_TOOLBAR); + gtk_container_add(GTK_CONTAINER(Button),Icon); + gtk_box_pack_start(GTK_BOX(hbox),Button,FALSE,FALSE,0); + //gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE); + gtk_tooltips_set_tip(Tips,Button,_("Delete the selected line"),NULL); + g_signal_connect_swapped(G_OBJECT(Button),"clicked", + G_CALLBACK(Load_Filename_List_Delete_Line), G_OBJECT(LoadFileContentList)); + + Button = gtk_button_new(); + Icon = gtk_image_new_from_stock(GTK_STOCK_REMOVE,GTK_ICON_SIZE_SMALL_TOOLBAR); + gtk_container_add(GTK_CONTAINER(Button),Icon); + gtk_box_pack_start(GTK_BOX(hbox),Button,FALSE,FALSE,0); + //gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE); + gtk_tooltips_set_tip(Tips,Button,_("Delete all blank lines"),NULL); + g_signal_connect_swapped(G_OBJECT(Button),"clicked", + G_CALLBACK(Load_Filename_List_Delete_All_Blank_Lines), G_OBJECT(LoadFileContentList)); + + Label = gtk_label_new(" "); + gtk_box_pack_start(GTK_BOX(hbox),Label,FALSE,FALSE,0); + + Button = gtk_button_new(); + Icon = gtk_image_new_from_stock(GTK_STOCK_GO_UP, GTK_ICON_SIZE_SMALL_TOOLBAR); + gtk_container_add(GTK_CONTAINER(Button),Icon); + gtk_box_pack_start(GTK_BOX(hbox),Button,FALSE,FALSE,0); + //gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE); + gtk_tooltips_set_tip(Tips,Button,_("Move up the selected line"),NULL); + g_signal_connect_swapped(G_OBJECT(Button),"clicked", + G_CALLBACK(Load_Filename_List_Move_Up), G_OBJECT(LoadFileContentList)); + + Button = gtk_button_new(); + Icon = gtk_image_new_from_stock(GTK_STOCK_GO_DOWN, GTK_ICON_SIZE_SMALL_TOOLBAR); + gtk_container_add(GTK_CONTAINER(Button),Icon); + gtk_box_pack_start(GTK_BOX(hbox),Button,FALSE,FALSE,0); + //gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE); + gtk_tooltips_set_tip(Tips,Button,_("Move down the selected line"),NULL); + g_signal_connect_swapped(G_OBJECT(Button),"clicked", + G_CALLBACK(Load_Filename_List_Move_Down), G_OBJECT(LoadFileContentList)); + + Label = gtk_label_new(" "); + gtk_box_pack_start(GTK_BOX(hbox),Label,FALSE,FALSE,0); + + Button = gtk_button_new(); + Icon = gtk_image_new_from_stock(GTK_STOCK_REFRESH,GTK_ICON_SIZE_SMALL_TOOLBAR); + gtk_container_add(GTK_CONTAINER(Button),Icon); + gtk_box_pack_start(GTK_BOX(hbox),Button,FALSE,FALSE,0); + //gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE); + gtk_tooltips_set_tip(Tips,Button,_("Reload"),NULL); + g_signal_connect_swapped(G_OBJECT(Button),"clicked", + G_CALLBACK(Load_Filename_List_Reload), G_OBJECT(LoadFileContentList)); + gtk_widget_show_all(loadedvbox); + + // + // Vbox for file list files + // filelistvbox = gtk_vbox_new(FALSE, 4); - // Label of current list - Label = gtk_label_new(_("Files Name List :")); - gtk_box_pack_start(GTK_BOX(filelistvbox), Label, FALSE, FALSE, 0); - // List of current filenames ScrollWindow = gtk_scrolled_window_new(NULL,NULL); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(ScrollWindow),GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC); @@ -2785,10 +2898,14 @@ void Open_Load_Filename_Window (void) gtk_box_pack_start(GTK_BOX(filelistvbox), ScrollWindow, TRUE, TRUE, 0); LoadFileNameListModel = gtk_list_store_new(LOAD_FILE_NAME_COUNT, G_TYPE_STRING,G_TYPE_POINTER); LoadFileNameList = gtk_tree_view_new_with_model(GTK_TREE_MODEL(LoadFileNameListModel)); + renderer = gtk_cell_renderer_text_new(); - column = gtk_tree_view_column_new_with_attributes("", renderer, "text", LOAD_FILE_NAME_TEXT, NULL); + column = gtk_tree_view_column_new_with_attributes(_("List of files"), + renderer, "text", LOAD_FILE_NAME_TEXT, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(LoadFileNameList), column); - gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(LoadFileNameList), FALSE); + gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(LoadFileNameList), TRUE); + //gtk_tree_selection_set_mode(gtk_tree_view_get_selection(GTK_TREE_VIEW(LoadFileNameList)),GTK_SELECTION_MULTIPLE); + gtk_tree_view_set_reorderable(GTK_TREE_VIEW(LoadFileNameList),TRUE); g_signal_connect(G_OBJECT(LoadFileNameList),"key-press-event", G_CALLBACK(Load_Filename_List_Key_Press),NULL); gtk_container_add(GTK_CONTAINER(ScrollWindow),LoadFileNameList); @@ -2796,8 +2913,73 @@ void Open_Load_Filename_Window (void) g_signal_connect_swapped(G_OBJECT(gtk_tree_view_get_selection(GTK_TREE_VIEW(LoadFileContentList))),"changed", G_CALLBACK(Load_Filename_Select_Row_In_Other_List), G_OBJECT(LoadFileNameList)); g_signal_connect_swapped(G_OBJECT(gtk_tree_view_get_selection(GTK_TREE_VIEW(LoadFileNameList))),"changed", G_CALLBACK(Load_Filename_Select_Row_In_Other_List), G_OBJECT(LoadFileContentList)); + // Commands (like the popup menu) + hbox = gtk_hbox_new(FALSE,4); + gtk_box_pack_start(GTK_BOX(filelistvbox),hbox,FALSE,FALSE,0); + + Button = gtk_button_new(); + Icon = gtk_image_new_from_stock(GTK_STOCK_ADD,GTK_ICON_SIZE_SMALL_TOOLBAR); + gtk_container_add(GTK_CONTAINER(Button),Icon); + gtk_box_pack_start(GTK_BOX(hbox),Button,FALSE,FALSE,0); + //gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE); + gtk_tooltips_set_tip(Tips,Button,_("Insert a blank line before the selected line"),NULL); + g_signal_connect_swapped(G_OBJECT(Button),"clicked", + G_CALLBACK(Load_Filename_List_Insert_Blank_Line), G_OBJECT(LoadFileNameList)); + + Button = gtk_button_new(); + Icon = gtk_image_new_from_stock(GTK_STOCK_REMOVE,GTK_ICON_SIZE_SMALL_TOOLBAR); + gtk_container_add(GTK_CONTAINER(Button),Icon); + gtk_box_pack_start(GTK_BOX(hbox),Button,FALSE,FALSE,0); + //gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE); + gtk_tooltips_set_tip(Tips,Button,_("Delete the selected line"),NULL); + g_signal_connect_swapped(G_OBJECT(Button),"clicked", + G_CALLBACK(Load_Filename_List_Delete_Line), G_OBJECT(LoadFileNameList)); + + Button = gtk_button_new(); + Icon = gtk_image_new_from_stock(GTK_STOCK_REMOVE,GTK_ICON_SIZE_SMALL_TOOLBAR); + gtk_container_add(GTK_CONTAINER(Button),Icon); + gtk_box_pack_start(GTK_BOX(hbox),Button,FALSE,FALSE,0); + //gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE); + gtk_tooltips_set_tip(Tips,Button,_("Delete all blank lines"),NULL); + g_signal_connect_swapped(G_OBJECT(Button),"clicked", + G_CALLBACK(Load_Filename_List_Delete_All_Blank_Lines), G_OBJECT(LoadFileNameList)); + + Label = gtk_label_new(" "); + gtk_box_pack_start(GTK_BOX(hbox),Label,FALSE,FALSE,0); + + Button = gtk_button_new(); + Icon = gtk_image_new_from_stock(GTK_STOCK_GO_UP, GTK_ICON_SIZE_SMALL_TOOLBAR); + gtk_container_add(GTK_CONTAINER(Button),Icon); + gtk_box_pack_start(GTK_BOX(hbox),Button,FALSE,FALSE,0); + //gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE); + gtk_tooltips_set_tip(Tips,Button,_("Move up the selected line"),NULL); + g_signal_connect_swapped(G_OBJECT(Button),"clicked", + G_CALLBACK(Load_Filename_List_Move_Up), G_OBJECT(LoadFileNameList)); + + Button = gtk_button_new(); + Icon = gtk_image_new_from_stock(GTK_STOCK_GO_DOWN, GTK_ICON_SIZE_SMALL_TOOLBAR); + gtk_container_add(GTK_CONTAINER(Button),Icon); + gtk_box_pack_start(GTK_BOX(hbox),Button,FALSE,FALSE,0); + //gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE); + gtk_tooltips_set_tip(Tips,Button,_("Move down the selected line"),NULL); + g_signal_connect_swapped(G_OBJECT(Button),"clicked", + G_CALLBACK(Load_Filename_List_Move_Down), G_OBJECT(LoadFileNameList)); + + Label = gtk_label_new(" "); + gtk_box_pack_start(GTK_BOX(hbox),Label,FALSE,FALSE,0); + + Button = gtk_button_new(); + Icon = gtk_image_new_from_stock(GTK_STOCK_REFRESH,GTK_ICON_SIZE_SMALL_TOOLBAR); + gtk_container_add(GTK_CONTAINER(Button),Icon); + gtk_box_pack_start(GTK_BOX(hbox),Button,FALSE,FALSE,0); + //gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE); + gtk_tooltips_set_tip(Tips,Button,_("Reload"),NULL); + g_signal_connect_swapped(G_OBJECT(Button),"clicked", + G_CALLBACK(Load_Filename_List_Reload), G_OBJECT(LoadFileNameList)); + gtk_widget_show_all(filelistvbox); + // Load the list of files in the list widget Load_File_List(); @@ -2810,9 +2992,15 @@ void Open_Load_Filename_Window (void) Create_Load_Filename_Popup_Menu(LoadFileContentList); Create_Load_Filename_Popup_Menu(LoadFileNameList); + hbox = gtk_hbox_new(FALSE,4); + gtk_box_pack_start(GTK_BOX(VBox),hbox,FALSE,TRUE,0); + + Label = gtk_label_new(_("Selected line:")); + gtk_box_pack_start(GTK_BOX(hbox),Label,FALSE,FALSE,0); + // Entry to edit a line into the list Entry = gtk_entry_new(); - gtk_box_pack_start(GTK_BOX(VBox),Entry,FALSE,TRUE,0); + gtk_box_pack_start(GTK_BOX(hbox),Entry,TRUE,TRUE,0); g_signal_connect(G_OBJECT(Entry),"changed",G_CALLBACK(Load_Filename_Update_Text_Line),G_OBJECT(LoadFileContentList)); // Signal to load the line text in the editing entry @@ -2838,14 +3026,14 @@ void Open_Load_Filename_Window (void) gtk_box_set_spacing(GTK_BOX(ButtonBox), 10); // Button to cancel - Button = Create_Button_With_Pixmap(BUTTON_CLOSE); + Button = gtk_button_new_from_stock(GTK_STOCK_CLOSE); gtk_container_add(GTK_CONTAINER(ButtonBox),Button); GTK_WIDGET_SET_FLAGS(Button, GTK_CAN_DEFAULT); gtk_widget_grab_default(Button); g_signal_connect(G_OBJECT(Button),"clicked", G_CALLBACK(Destroy_Load_Filename_Window),NULL); // Button to load filenames - Button = Create_Button_With_Pixmap(BUTTON_APPLY); + Button = gtk_button_new_from_stock(GTK_STOCK_APPLY); gtk_container_add(GTK_CONTAINER(ButtonBox),Button); GTK_WIDGET_SET_FLAGS(Button,GTK_CAN_DEFAULT); g_signal_connect(G_OBJECT(Button),"clicked", G_CALLBACK(Load_Filename_Set_Filenames),NULL); @@ -3146,11 +3334,13 @@ void Load_Filename_Set_Filenames (void) found = gtk_tree_model_get_iter(GTK_TREE_MODEL(LoadFileNameListModel), &iter_name, currentPath); if (found) - gtk_tree_model_get(GTK_TREE_MODEL(LoadFileNameListModel), &iter_name, LOAD_FILE_NAME_POINTER, &ETFile, -1); + gtk_tree_model_get(GTK_TREE_MODEL(LoadFileNameListModel), &iter_name, + LOAD_FILE_NAME_POINTER, &ETFile, -1); found = gtk_tree_model_get_iter(GTK_TREE_MODEL(LoadFileContentListModel), &iter_content, currentPath); if (found) - gtk_tree_model_get(GTK_TREE_MODEL(LoadFileContentListModel), &iter_content, LOAD_FILE_CONTENT_TEXT, &list_text, -1); + gtk_tree_model_get(GTK_TREE_MODEL(LoadFileContentListModel), &iter_content, + LOAD_FILE_CONTENT_TEXT, &list_text, -1); if (ETFile && list_text && g_utf8_strlen(list_text, -1)>0) { @@ -3207,8 +3397,9 @@ GtkWidget *Create_Load_Filename_Popup_Menu(GtkWidget *list) BrowserPopupMenu = gtk_menu_new(); - g_signal_connect_swapped(G_OBJECT(list),"button_press_event", G_CALLBACK(Load_Filename_Popup_Menu_Handler), G_OBJECT(BrowserPopupMenu)); - + g_signal_connect_swapped(G_OBJECT(list), "button_press_event", + G_CALLBACK(Load_Filename_Popup_Menu_Handler), G_OBJECT(BrowserPopupMenu)); + MenuItem = gtk_image_menu_item_new_with_label(_("Insert a blank line")); Image = gtk_image_new_from_stock(GTK_STOCK_ADD,GTK_ICON_SIZE_MENU); gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(MenuItem),Image); @@ -3230,6 +3421,21 @@ GtkWidget *Create_Load_Filename_Popup_Menu(GtkWidget *list) MenuItem = gtk_menu_item_new(); gtk_menu_shell_append(GTK_MENU_SHELL(BrowserPopupMenu),MenuItem); + MenuItem = gtk_image_menu_item_new_with_label(_("Move up this line")); + Image = gtk_image_new_from_stock(GTK_STOCK_GO_UP,GTK_ICON_SIZE_MENU); + gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(MenuItem),Image); + gtk_menu_shell_append(GTK_MENU_SHELL(BrowserPopupMenu),MenuItem); + g_signal_connect_swapped(G_OBJECT(MenuItem),"activate", G_CALLBACK(Load_Filename_List_Move_Up),G_OBJECT(list)); + + MenuItem = gtk_image_menu_item_new_with_label(_("Move down this line")); + Image = gtk_image_new_from_stock(GTK_STOCK_GO_DOWN,GTK_ICON_SIZE_MENU); + gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(MenuItem),Image); + gtk_menu_shell_append(GTK_MENU_SHELL(BrowserPopupMenu),MenuItem); + g_signal_connect_swapped(G_OBJECT(MenuItem),"activate", G_CALLBACK(Load_Filename_List_Move_Down),G_OBJECT(list)); + + MenuItem = gtk_menu_item_new(); + gtk_menu_shell_append(GTK_MENU_SHELL(BrowserPopupMenu),MenuItem); + MenuItem = gtk_image_menu_item_new_with_label(_("Reload")); Image = gtk_image_new_from_stock(GTK_STOCK_REFRESH,GTK_ICON_SIZE_MENU); gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(MenuItem),Image); @@ -3243,7 +3449,7 @@ GtkWidget *Create_Load_Filename_Popup_Menu(GtkWidget *list) /* * Insert a blank line before the selected line in the treeview passed as parameter */ -void Load_Filename_List_Insert_Blank_Line(GtkWidget *treeview) +void Load_Filename_List_Insert_Blank_Line (GtkWidget *treeview) { GtkTreeSelection *selection; GtkTreeIter selectedIter; @@ -3262,7 +3468,7 @@ void Load_Filename_List_Insert_Blank_Line(GtkWidget *treeview) } /* - * Delete all blank lines in the treeview passed in as parameter + * Delete all blank lines in the treeview passed as parameter */ void Load_Filename_List_Delete_All_Blank_Lines (GtkWidget *treeview) { @@ -3297,9 +3503,9 @@ void Load_Filename_List_Delete_All_Blank_Lines (GtkWidget *treeview) } /* - * Delete the selected line in the treeview passed in as parameter + * Delete the selected line in the treeview passed as parameter */ -void Load_Filename_List_Delete_Line(GtkWidget *treeview) +void Load_Filename_List_Delete_Line (GtkWidget *treeview) { GtkTreeSelection *selection; GtkTreeIter selectedIter, itercopy; @@ -3326,6 +3532,109 @@ void Load_Filename_List_Delete_Line(GtkWidget *treeview) gtk_tree_selection_select_iter(selection, &itercopy); } +/* + * Move up the selected line in the treeview passed as parameter + */ +void Load_Filename_List_Move_Up (GtkWidget *treeview) +{ + GtkTreeSelection *selection; + GList *selectedRows; + GList *selectedRowsCopy; + GtkTreeIter currentFile; + GtkTreeIter nextFile; + GtkTreePath *currentPath; + GtkTreeModel *treemodel; + gboolean valid; + + if (!treeview) return; + + selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview)); + treemodel = gtk_tree_view_get_model(GTK_TREE_VIEW(treeview)); + selectedRows = gtk_tree_selection_get_selected_rows(selection, NULL); + + if (g_list_length(selectedRows) == 0) + { + g_list_foreach(selectedRows, (GFunc)gtk_tree_path_free, NULL); + g_list_free(selectedRows); + return; + } + + selectedRowsCopy = selectedRows; + + while (selectedRows) + { + currentPath = (GtkTreePath*) selectedRows->data; + valid = gtk_tree_model_get_iter(treemodel, ¤tFile, currentPath); + if (valid) + { + // Find the entry above the node... + if (gtk_tree_path_prev(currentPath)) + { + // ...and if it exists, swap the two rows by iter + gtk_tree_model_get_iter(treemodel, &nextFile, currentPath); + gtk_list_store_swap(GTK_LIST_STORE(treemodel), ¤tFile, &nextFile); + } + } + + selectedRows = selectedRows->next; + if (!selectedRows) break; + } + + g_list_foreach(selectedRowsCopy, (GFunc)gtk_tree_path_free, NULL); + g_list_free(selectedRowsCopy); + +} + +/* + * Move down the selected line in the treeview passed as parameter + */ +void Load_Filename_List_Move_Down (GtkWidget *treeview) +{ + GtkTreeSelection *selection; + GList *selectedRows; + GList *selectedRowsCopy; + GtkTreeIter currentFile; + GtkTreeIter nextFile; + GtkTreePath *currentPath; + GtkTreeModel *treemodel; + gboolean valid; + + if (!treeview) return; + + selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview)); + treemodel = gtk_tree_view_get_model(GTK_TREE_VIEW(treeview)); + selectedRows = gtk_tree_selection_get_selected_rows(selection, NULL); + + if (g_list_length(selectedRows) == 0) + { + g_list_foreach(selectedRows, (GFunc)gtk_tree_path_free, NULL); + g_list_free(selectedRows); + return; + } + + selectedRowsCopy = selectedRows; + + while (selectedRows) + { + currentPath = (GtkTreePath*) selectedRows->data; + valid = gtk_tree_model_get_iter(treemodel, ¤tFile, currentPath); + if (valid) + { + // Find the entry below the node and swap the two nodes by iter + gtk_tree_path_next(currentPath); + if (gtk_tree_model_get_iter(treemodel, &nextFile, currentPath)) + gtk_list_store_swap(GTK_LIST_STORE(treemodel), ¤tFile, &nextFile); + } + + if (!selectedRows->next) break; + selectedRows = selectedRows->next; + } + + g_list_foreach(selectedRowsCopy, (GFunc)gtk_tree_path_free, NULL); + g_list_free(selectedRowsCopy); + +} + /* * Reload a list of choice * The list parameter refers to a GtkTreeView (LoadFileNameList or LoadFileContentList) @@ -3337,6 +3646,7 @@ void Load_Filename_List_Reload (GtkWidget *treeview) if (GTK_TREE_VIEW(treeview) == (GtkTreeView *)LoadFileContentList) { Load_File_Content(GTK_BIN(FileToLoadCombo)->child); + } else if (GTK_TREE_VIEW(treeview) == (GtkTreeView *)LoadFileNameList) { Load_File_List(); diff --git a/src/msgbox.c b/src/msgbox.c old mode 100755 new mode 100644 index 3099e50..f9a8cb7 --- a/src/msgbox.c +++ b/src/msgbox.c @@ -184,7 +184,7 @@ GtkWidget *msg_box_new (gchar *title, gchar *message, const gchar *stock_id, gtk_container_add(GTK_CONTAINER(GTK_DIALOG(mb)->action_area),ButtonBox); /* Read buttons from variable arguments */ - va_start (cursor,stock_id); + va_start(cursor,stock_id); while ( (cursor_value = va_arg(cursor,gint)) != 0 ) { Button = Create_Button_With_Pixmap(cursor_value); diff --git a/src/msgbox.h b/src/msgbox.h old mode 100755 new mode 100644 diff --git a/src/picture.c b/src/picture.c old mode 100755 new mode 100644 index 8dd7b37..4f9edae --- a/src/picture.c +++ b/src/picture.c @@ -731,7 +731,8 @@ void Picture_Save_Button_Clicked (GObject *object) msg = g_strdup_printf(_("The following file already exists :\n'%s'\n" "Do you want to overwrite?"),filename_utf8); - msgbox = msg_box_new(_("Save file..."),msg,GTK_STOCK_DIALOG_QUESTION,BUTTON_NO,BUTTON_YES,0); + msgbox = msg_box_new(_("Save file..."),msg, + GTK_STOCK_DIALOG_QUESTION,BUTTON_NO,BUTTON_YES,0); g_free(msg); msg_box_hide_check_button(MSG_BOX(msgbox)); button = msg_box_run(MSG_BOX(msgbox)); @@ -984,7 +985,7 @@ void PictureEntry_Update (Picture *pic, gint select) "has been read to determine how to create the image buffer.")); Log_Print("%s",msg); msgbox = msg_box_new(_("Loading Picture File..."),msg, - GTK_STOCK_DIALOG_ERROR,BUTTON_YES,0); + GTK_STOCK_DIALOG_ERROR,BUTTON_YES,0); msg_box_hide_check_button(MSG_BOX(msgbox)); g_free(msg); msg_box_run(MSG_BOX(msgbox)); diff --git a/src/prefs.c b/src/prefs.c old mode 100755 new mode 100644 index 485e35f..7e862d9 --- a/src/prefs.c +++ b/src/prefs.c @@ -407,6 +407,38 @@ void Open_OptionsWindow (void) g_signal_connect_swapped(G_OBJECT(Button),"clicked", G_CALLBACK(File_Selection_Window_For_File), G_OBJECT(GTK_BIN(FilePlayerCombo)->child)); + /* Log options */ + Frame = gtk_frame_new (_("Log Options")); + gtk_box_pack_start(GTK_BOX(VBox),Frame,FALSE,FALSE,0); + vbox = gtk_vbox_new(FALSE,2); + gtk_container_add(GTK_CONTAINER(Frame),vbox); + gtk_container_set_border_width(GTK_CONTAINER(vbox), 2); + + // Show / hide log view + ShowLogView = gtk_check_button_new_with_label(_("Show log view in main window")); + gtk_box_pack_start(GTK_BOX(vbox),ShowLogView,FALSE,FALSE,0); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ShowLogView),SHOW_LOG_VIEW); + gtk_tooltips_set_tip(Tips,ShowLogView,_("If activated, the log view would be " + "visible in the main window."),NULL); + + // Max number of lines + hbox = gtk_hbox_new(FALSE,2); + gtk_box_pack_start(GTK_BOX(vbox),hbox,FALSE,FALSE,0); + gtk_container_set_border_width(GTK_CONTAINER(hbox), 4); + Label = gtk_label_new (_("Max number of lines :")); + gtk_box_pack_start(GTK_BOX(hbox),Label,FALSE,FALSE,0); + + LogMaxLinesSpinButton = gtk_spin_button_new((GtkAdjustment *)gtk_adjustment_new(2.0,2.0,6.0,1.0,1.0,1.0),1.0,0); + LogMaxLinesSpinButton = gtk_spin_button_new_with_range(10.0,1500.0,10.0); + gtk_box_pack_start(GTK_BOX(hbox),LogMaxLinesSpinButton,FALSE,FALSE,0); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(LogMaxLinesSpinButton),(gfloat)LOG_MAX_LINES); + //g_signal_connect(G_OBJECT(NumberTrackFormated),"toggled",G_CALLBACK(Number_Track_Formated_Toggled),NULL); + //g_signal_emit_by_name(G_OBJECT(NumberTrackFormated),"toggled"); +/* gtk_tooltips_set_tip(Tips,GTK_BIN(FilePlayerCombo)->child,_("Enter the program used to " + "play the files. Some arguments can be passed for the program (as 'xmms -p') before " + "to receive files as other arguments."),NULL); +*/ + /* @@ -883,6 +915,7 @@ void Open_OptionsWindow (void) Table = gtk_table_new(4,2,FALSE); gtk_box_pack_start(GTK_BOX(vbox),Table,FALSE,FALSE,0); + //gtk_container_set_border_width(GTK_CONTAINER(Table), 2); //gtk_table_set_row_spacings(GTK_TABLE(Table),2); gtk_table_set_col_spacings(GTK_TABLE(Table),2); @@ -1137,7 +1170,7 @@ void Open_OptionsWindow (void) CddbServerCgiPathAutomaticSearch = gtk_entry_new(); gtk_box_pack_start(GTK_BOX(hbox),CddbServerCgiPathAutomaticSearch,FALSE,FALSE,0); if (CDDB_SERVER_CGI_PATH_AUTOMATIC_SEARCH) - gtk_entry_set_text(GTK_ENTRY(CddbServerCgiPathAutomaticSearch) ,CDDB_SERVER_CGI_PATH_AUTOMATIC_SEARCH); + gtk_entry_set_text(GTK_ENTRY(CddbServerCgiPathAutomaticSearch),CDDB_SERVER_CGI_PATH_AUTOMATIC_SEARCH); // 2sd automatic search server hbox = gtk_hbox_new(FALSE,2); @@ -1381,25 +1414,25 @@ void Open_OptionsWindow (void) /* Apply Button */ - Button = Create_Button_With_Pixmap(BUTTON_APPLY); + Button = gtk_button_new_from_stock(GTK_STOCK_APPLY); // Disable temporarily the apply button ////gtk_container_add(GTK_CONTAINER(ButtonBox),Button); - g_signal_connect(G_OBJECT(Button),"clicked",G_CALLBACK(OptionsWindow_Apply_Button),NULL); - GTK_WIDGET_SET_FLAGS(Button, GTK_CAN_DEFAULT); + ////g_signal_connect(G_OBJECT(Button),"clicked",G_CALLBACK(OptionsWindow_Apply_Button),NULL); + ////GTK_WIDGET_SET_FLAGS(Button, GTK_CAN_DEFAULT); gtk_tooltips_set_tip(Tips,Button,_("Apply changes (but don't save) and close this window"),NULL); /* Cancel Button */ - Button = Create_Button_With_Pixmap(BUTTON_CANCEL); + Button = gtk_button_new_from_stock(GTK_STOCK_CANCEL); gtk_container_add(GTK_CONTAINER(ButtonBox), Button); g_signal_connect(G_OBJECT(Button),"clicked", G_CALLBACK(OptionsWindow_Cancel_Button),NULL); GTK_WIDGET_SET_FLAGS(Button, GTK_CAN_DEFAULT); - gtk_widget_grab_default (Button); + gtk_widget_grab_default(Button); gtk_tooltips_set_tip(Tips,Button,_("Close this window without saving"),NULL); /* Save Button */ - Button = Create_Button_With_Pixmap(BUTTON_SAVE); + Button = gtk_button_new_from_stock(GTK_STOCK_OK); gtk_container_add(GTK_CONTAINER(ButtonBox), Button); g_signal_connect(G_OBJECT(Button),"clicked", G_CALLBACK(OptionsWindow_Save_Button),NULL); GTK_WIDGET_SET_FLAGS(Button, GTK_CAN_DEFAULT); @@ -1616,12 +1649,6 @@ void OptionsWindow_Quit(void) { if (OptionsWindow) { - /* Save combobox history lists before exit */ - Save_Default_Path_To_MP3_List (DefaultPathModel, MISC_COMBO_TEXT); - Save_Default_Tag_Comment_Text_List(DefaultCommentModel, MISC_COMBO_TEXT); - Save_Audio_File_Player_List (FilePlayerModel, MISC_COMBO_TEXT); - Save_Cddb_Local_Path_List (CddbLocalPathModel, MISC_COMBO_TEXT); - OptionsWindow_Apply_Changes(); /* Now quit */ @@ -1655,6 +1682,12 @@ void OptionsWindow_Apply_Changes (void) /* Get the last visible notebook page */ OPTIONS_NOTEBOOK_PAGE = gtk_notebook_get_current_page(GTK_NOTEBOOK(OptionsNoteBook)); + + /* Save combobox history lists before exit */ + Save_Default_Path_To_MP3_List (DefaultPathModel, MISC_COMBO_TEXT); + Save_Default_Tag_Comment_Text_List(DefaultCommentModel, MISC_COMBO_TEXT); + Save_Audio_File_Player_List (FilePlayerModel, MISC_COMBO_TEXT); + Save_Cddb_Local_Path_List (CddbLocalPathModel, MISC_COMBO_TEXT); } } diff --git a/src/prefs.h b/src/prefs.h old mode 100755 new mode 100644 index b88eed1..5c1e122 --- a/src/prefs.h +++ b/src/prefs.h @@ -111,6 +111,8 @@ GtkWidget *NumberTrackFormatedSpinButton; GtkWidget *OggTagWriteXmmsComment; GtkWidget *SetFocusToSameTagField; GtkWidget *SetFocusToFirstTagField; +GtkWidget *LogMaxLinesSpinButton; +GtkWidget *ShowLogView; /* Scanner */ diff --git a/src/scan.c b/src/scan.c old mode 100755 new mode 100644 index ce080a0..a16adf9 --- a/src/scan.c +++ b/src/scan.c @@ -234,7 +234,9 @@ void Scan_Free_File_Fill_Tag_List (GList *list); void Scan_Rename_Directory_Generate_Preview (void); gchar **Scan_Return_File_Tag_Field_From_Mask_Code (File_Tag *FileTag, gchar code); -void Scan_Process_Fields_Functions (gchar *string); +void Scan_Process_Fields_Functions (gchar **string); + +gint Scan_Word_Is_Roman_Numeral (gchar *text); void Process_Fields_Check_Button_Toggled (GtkObject *object, GList *list); void Process_Fields_Convert_Check_Button_Toggled (GtkObject *object); @@ -242,16 +244,17 @@ void Select_Fields_Invert_Selection (void); void Select_Fields_Select_Unselect_All (void); void Select_Fields_Set_Sensitive (void); -void Mask_Editor_List_Row_Selected (GtkTreeSelection* selection, gpointer data); -void Mask_Editor_List_New (void); -void Mask_Editor_List_Duplicate (void); -void Mask_Editor_List_Add (void); -void Mask_Editor_List_Remove (void); -void Mask_Editor_List_Move_Up (void); -void Mask_Editor_List_Move_Down (void); -void Mask_Editor_List_Save_Button (void); -void Mask_Editor_Entry_Changed (void); -gboolean Mask_Editor_List_Key_Press (GtkWidget *widget, GdkEvent *event); +void Mask_Editor_List_Row_Selected (GtkTreeSelection* selection, gpointer data); +void Mask_Editor_List_Set_Row_Visible (GtkTreeModel *treeModel, GtkTreeIter *rowIter); +void Mask_Editor_List_New (void); +void Mask_Editor_List_Duplicate (void); +void Mask_Editor_List_Add (void); +void Mask_Editor_List_Remove (void); +void Mask_Editor_List_Move_Up (void); +void Mask_Editor_List_Move_Down (void); +void Mask_Editor_List_Save_Button (void); +void Mask_Editor_Entry_Changed (void); +gboolean Mask_Editor_List_Key_Press (GtkWidget *widget, GdkEvent *event); void Mask_Editor_Clean_Up_Masks_List (void); @@ -1067,18 +1070,14 @@ void Scan_Process_Fields (ET_File *ETFile) File_Name *st_filename; File_Tag *st_filetag; gchar *filename_utf8; - //GString *string2process; - guint string_length; - gchar *string; - gchar *temp; + gchar *string; if (!ScannerWindow || !ETFile) return; - st_filename = (File_Name *)ETFile->FileNameNew->data; - st_filetag = (File_Tag *)ETFile->FileTag->data; - //string2process = g_string_sized_new(512); - + st_filename = (File_Name *)ETFile->FileNameNew->data; + st_filetag = (File_Tag *)ETFile->FileTag->data; + /* Process the filename */ if (st_filename != NULL) { @@ -1092,17 +1091,11 @@ void Scan_Process_Fields (ET_File *ETFile) if (!FileName) FileName = ET_File_Name_Item_New(); - // FIX ME : we suppose that it will not grow more than 2 times its size... - temp = g_path_get_basename(filename_utf8); - string_length = 2 * g_utf8_strlen(temp,-1); - string = g_malloc(string_length+1); - strncpy(string,temp,string_length); - g_free(temp); - string[string_length]='\0'; + string = g_path_get_basename(filename_utf8); // Remove the extension to set it to lower case (to avoid problem with undo) if ((pos=strrchr(string,'.'))!=NULL) *pos = 0; - Scan_Process_Fields_Functions(string); + Scan_Process_Fields_Functions(&string); string_utf8 = ET_File_Name_Generate(ETFile,string); ET_Set_Filename_File_Name_Item(FileName,string_utf8,NULL); @@ -1123,13 +1116,9 @@ void Scan_Process_Fields (ET_File *ETFile) ET_Copy_File_Tag_Item(ETFile,FileTag); } - // FIX ME : we suppose that it will not grow more than 2 times its size... - string_length = 2 * strlen(st_filetag->title); - string = g_malloc(string_length+1); - strncpy(string,st_filetag->title,string_length); - string[string_length]='\0'; + string = g_strdup(st_filetag->title); - Scan_Process_Fields_Functions(string); + Scan_Process_Fields_Functions(&string); ET_Set_Field_File_Tag_Item(&FileTag->title,string); @@ -1145,13 +1134,9 @@ void Scan_Process_Fields (ET_File *ETFile) ET_Copy_File_Tag_Item(ETFile,FileTag); } - // FIX ME : we suppose that it will not grow more than 2 times its size... - string_length = 2 * strlen(st_filetag->artist); - string = g_malloc(string_length+1); - strncpy(string,st_filetag->artist,string_length); - string[string_length]='\0'; - - Scan_Process_Fields_Functions(string); + string = g_strdup(st_filetag->artist); + + Scan_Process_Fields_Functions(&string); ET_Set_Field_File_Tag_Item(&FileTag->artist,string); @@ -1167,13 +1152,9 @@ void Scan_Process_Fields (ET_File *ETFile) ET_Copy_File_Tag_Item(ETFile,FileTag); } - // FIX ME : we suppose that it will not grow more than 2 times its size... - string_length = 2 * strlen(st_filetag->album); - string = g_malloc(string_length+1); - strncpy(string,st_filetag->album,string_length); - string[string_length]='\0'; - - Scan_Process_Fields_Functions(string); + string = g_strdup(st_filetag->album); + + Scan_Process_Fields_Functions(&string); ET_Set_Field_File_Tag_Item(&FileTag->album,string); @@ -1189,13 +1170,9 @@ void Scan_Process_Fields (ET_File *ETFile) ET_Copy_File_Tag_Item(ETFile,FileTag); } - // FIX ME : we suppose that it will not grow more than 2 times its size... - string_length = 2 * strlen(st_filetag->genre); - string = g_malloc(string_length+1); - strncpy(string,st_filetag->genre,string_length); - string[string_length]='\0'; - - Scan_Process_Fields_Functions(string); + string = g_strdup(st_filetag->genre); + + Scan_Process_Fields_Functions(&string); ET_Set_Field_File_Tag_Item(&FileTag->genre,string); @@ -1211,13 +1188,9 @@ void Scan_Process_Fields (ET_File *ETFile) ET_Copy_File_Tag_Item(ETFile,FileTag); } - // FIX ME : we suppose that it will not grow more than 2 times its size... - string_length = 2 * strlen(st_filetag->comment); - string = g_malloc(string_length+1); - strncpy(string,st_filetag->comment,string_length); - string[string_length]='\0'; - - Scan_Process_Fields_Functions(string); + string = g_strdup(st_filetag->comment); + + Scan_Process_Fields_Functions(&string); ET_Set_Field_File_Tag_Item(&FileTag->comment,string); @@ -1233,13 +1206,9 @@ void Scan_Process_Fields (ET_File *ETFile) ET_Copy_File_Tag_Item(ETFile,FileTag); } - // FIX ME : we suppose that it will not grow more than 2 times its size... - string_length = 2 * strlen(st_filetag->composer); - string = g_malloc(string_length+1); - strncpy(string,st_filetag->composer,string_length); - string[string_length]='\0'; - - Scan_Process_Fields_Functions(string); + string = g_strdup(st_filetag->composer); + + Scan_Process_Fields_Functions(&string); ET_Set_Field_File_Tag_Item(&FileTag->composer,string); @@ -1255,13 +1224,9 @@ void Scan_Process_Fields (ET_File *ETFile) ET_Copy_File_Tag_Item(ETFile,FileTag); } - // FIX ME : we suppose that it will not grow more than 2 times its size... - string_length = 2 * strlen(st_filetag->orig_artist); - string = g_malloc(string_length+1); - strncpy(string,st_filetag->orig_artist,string_length); - string[string_length]='\0'; - - Scan_Process_Fields_Functions(string); + string = g_strdup(st_filetag->orig_artist); + + Scan_Process_Fields_Functions(&string); ET_Set_Field_File_Tag_Item(&FileTag->orig_artist,string); @@ -1277,13 +1242,9 @@ void Scan_Process_Fields (ET_File *ETFile) ET_Copy_File_Tag_Item(ETFile,FileTag); } - // FIX ME : we suppose that it will not grow more than 2 times its size... - string_length = 2 * strlen(st_filetag->copyright); - string = g_malloc(string_length+1); - strncpy(string,st_filetag->copyright,string_length); - string[string_length]='\0'; - - Scan_Process_Fields_Functions(string); + string = g_strdup(st_filetag->copyright); + + Scan_Process_Fields_Functions(&string); ET_Set_Field_File_Tag_Item(&FileTag->copyright,string); @@ -1299,13 +1260,9 @@ void Scan_Process_Fields (ET_File *ETFile) ET_Copy_File_Tag_Item(ETFile,FileTag); } - // FIX ME : we suppose that it will not grow more than 2 times its size... - string_length = 2 * strlen(st_filetag->url); - string = g_malloc(string_length+1); - strncpy(string,st_filetag->url,string_length); - string[string_length]='\0'; - - Scan_Process_Fields_Functions(string); + string = g_strdup(st_filetag->url); + + Scan_Process_Fields_Functions(&string); ET_Set_Field_File_Tag_Item(&FileTag->url,string); @@ -1321,13 +1278,9 @@ void Scan_Process_Fields (ET_File *ETFile) ET_Copy_File_Tag_Item(ETFile,FileTag); } - // FIX ME : we suppose that it will not grow more than 2 times its size... - string_length = 2 * strlen(st_filetag->encoded_by); - string = g_malloc(string_length+1); - strncpy(string,st_filetag->encoded_by,string_length); - string[string_length]='\0'; - - Scan_Process_Fields_Functions(string); + string = g_strdup(st_filetag->encoded_by); + + Scan_Process_Fields_Functions(&string); ET_Set_Field_File_Tag_Item(&FileTag->encoded_by,string); @@ -1346,51 +1299,50 @@ void Scan_Process_Fields (ET_File *ETFile) } -void Scan_Process_Fields_Functions (gchar *string) +void Scan_Process_Fields_Functions (gchar **string) { - if (GTK_TOGGLE_BUTTON(ProcessFieldsConvertIntoSpace)->active) { - Scan_Convert_Underscore_Into_Space(string); - Scan_Convert_P20_Into_Space(string); + Scan_Convert_Underscore_Into_Space(*string); + Scan_Convert_P20_Into_Space(*string); } if (GTK_TOGGLE_BUTTON(ProcessFieldsConvertSpace)->active) - Scan_Convert_Space_Into_Undescore(string); + Scan_Convert_Space_Into_Undescore(*string); if (GTK_TOGGLE_BUTTON(ProcessFieldsInsertSpace)->active) Scan_Process_Fields_Insert_Space(string); if (GTK_TOGGLE_BUTTON(ProcessFieldsOnlyOneSpace)->active) - Scan_Process_Fields_Keep_One_Space(string); + Scan_Process_Fields_Keep_One_Space(*string); if (GTK_TOGGLE_BUTTON(ProcessFieldsConvert)->active) - Scan_Convert(string); + Scan_Convert_Character(string); if (GTK_TOGGLE_BUTTON(ProcessFieldsAllUppercase)->active) - Scan_Process_Fields_All_Uppercase(string); + Scan_Process_Fields_All_Uppercase(*string); if (GTK_TOGGLE_BUTTON(ProcessFieldsAllDowncase)->active) - Scan_Process_Fields_All_Downcase(string); + Scan_Process_Fields_All_Downcase(*string); if (GTK_TOGGLE_BUTTON(ProcessFieldsFirstLetterUppercase)->active) - Scan_Process_Fields_Letter_Uppercase(string); + Scan_Process_Fields_Letter_Uppercase(*string); if (GTK_TOGGLE_BUTTON(ProcessFieldsFirstLettersUppercase)->active) - Scan_Process_Fields_First_Letters_Uppercase(string); + Scan_Process_Fields_First_Letters_Uppercase(*string); if (GTK_TOGGLE_BUTTON(ProcessFieldsRemoveSpace)->active) - Scan_Process_Fields_Remove_Space(string); + Scan_Process_Fields_Remove_Space(*string); } -void Scan_Process_Fields_All_Uppercase (gchar *text) +void Scan_Process_Fields_All_Uppercase (gchar *string) { gchar *temp; gchar temp2[6]; // Must have at least 6 bytes of space gunichar c; - for (temp = text; *temp; temp = g_utf8_next_char(temp)) + for (temp = string; *temp; temp = g_utf8_next_char(temp)) { c = g_utf8_get_char(temp); if (g_unichar_islower(c)) @@ -1398,13 +1350,13 @@ void Scan_Process_Fields_All_Uppercase (gchar *text) } } -void Scan_Process_Fields_All_Downcase (gchar *text) +void Scan_Process_Fields_All_Downcase (gchar *string) { gchar *temp; gchar temp2[6]; gunichar c; - for (temp = text; *temp; temp = g_utf8_next_char(temp)) + for (temp = string; *temp; temp = g_utf8_next_char(temp)) { c = g_utf8_get_char(temp); if (g_unichar_isupper(c)) @@ -1412,7 +1364,7 @@ void Scan_Process_Fields_All_Downcase (gchar *text) } } -void Scan_Process_Fields_Letter_Uppercase (gchar *text) +void Scan_Process_Fields_Letter_Uppercase (gchar *string) { gchar *temp; gchar temp2[6]; @@ -1421,7 +1373,7 @@ void Scan_Process_Fields_Letter_Uppercase (gchar *text) gchar utf8_character[6]; gchar *word, *word1, *word2; - for (temp = text; *temp; temp = g_utf8_next_char(temp)) + for (temp = string; *temp; temp = g_utf8_next_char(temp)) { c = g_utf8_get_char(temp); if (set_to_upper_case && g_unichar_islower(c)) @@ -1431,11 +1383,12 @@ void Scan_Process_Fields_Letter_Uppercase (gchar *text) set_to_upper_case = FALSE; // After the first time, all will be down case } - temp = text; + temp = string; // Uppercase again the word 'I' in english while ( temp ) { + word = temp; // Needed if there is only one word word1 = g_utf8_strchr(temp,-1,' '); word2 = g_utf8_strchr(temp,-1,'_'); @@ -1447,6 +1400,7 @@ void Scan_Process_Fields_Letter_Uppercase (gchar *text) else if (word2) word = word2; else + // Last word of the string break; // Go to first character of the word (char. after ' ' or '_') @@ -1463,7 +1417,11 @@ void Scan_Process_Fields_Letter_Uppercase (gchar *text) } } -void Scan_Process_Fields_First_Letters_Uppercase (gchar *text) +/* + * Function to set the first letter of each word to uppercase, according the "Chicago Manual of Style" + * No needed to reallocate + */ +void Scan_Process_Fields_First_Letters_Uppercase (gchar *string) { /**** DANIEL TEST ***** gchar *iter; @@ -1487,31 +1445,35 @@ void Scan_Process_Fields_First_Letters_Uppercase (gchar *text) ****/ /**** Barış Çiçek version ****/ gchar *word, *word1, *word2, *temp; - gint i; + gint i, len; gchar utf8_character[6]; gunichar c; gboolean set_to_upper_case, set_to_upper_case_tmp; // There have to be space at the end of words to seperate them from prefix + // Chicago Manual of Style "Heading caps" Capitalization Rules (CMS 1993, 282) (http://www.docstyles.com/cmscrib.htm#Note2) gchar *exempt[] = { "a ", "a_", + "against ", "against_", "an ", "an_", "and ", "and_", "at ", "at_", + "between ", "between_", "but ", "but_", - "feat. ", "feat._", + //"feat. ", "feat._", // Removed by Slash Bunny "for ", "for_", "in ", "in_", "nor ", "nor_", "of ", "of_", - "off ", "off_", + //"off ", "off_", // Removed by Slash Bunny "on ", "on_", "or ", "or_", - "over ", "over_", + //"over ", "over_", // Removed by Slash Bunny "so ", "so_", "the ", "the_", "to ", "to_", "with ", "with_", + "yet ", "yet_", NULL }; @@ -1519,25 +1481,33 @@ void Scan_Process_Fields_First_Letters_Uppercase (gchar *text) { exempt[0] = NULL; } - Scan_Process_Fields_All_Downcase(text); + Scan_Process_Fields_All_Downcase(string); - if (!g_utf8_validate(text,-1,NULL)) + if (!g_utf8_validate(string,-1,NULL)) { Log_Print("Scan_Process_Fields_First_Letters_Uppercase: Not a valid utf8! quiting"); return; } // Removes trailing whitespace - text = g_strchomp(text); + string = g_strchomp(string); - temp = text; + temp = string; - // Set first character to uppercase - c = g_utf8_get_char(temp); - strncpy(text, utf8_character, g_unichar_to_utf8(g_unichar_toupper(c), utf8_character)); + // If the word is a roman numeral, capitalize all of it + if ((len = Scan_Word_Is_Roman_Numeral(temp))) + { + strncpy(string, g_utf8_strup(temp, len), len); + } else + { + // Set first character to uppercase + c = g_utf8_get_char(temp); + strncpy(string, utf8_character, g_unichar_to_utf8(g_unichar_toupper(c), utf8_character)); + } // Uppercase first character of each word, except for 'exempt[]' words lists while ( temp ) { + word = temp; // Needed if there is only one word word1 = g_utf8_strchr(temp,-1,' '); word2 = g_utf8_strchr(temp,-1,'_'); @@ -1549,23 +1519,37 @@ void Scan_Process_Fields_First_Letters_Uppercase (gchar *text) else if (word2) word = word2; else + { + // Last word of the string: the first letter is always uppercase, + // even if it's in the exempt list. This is a Chicago Manual of Style rule. + // Last Word In String - Should Capitalize Regardless of Word (Chicago Manual of Style) + c = g_utf8_get_char(word); + strncpy(word, utf8_character, g_unichar_to_utf8(g_unichar_toupper(c), utf8_character)); break; + } // Go to first character of the word (char. after ' ' or '_') word = word+1; - // Set uppercase the first character of this word - c = g_utf8_get_char(word); - strncpy(word, utf8_character, g_unichar_to_utf8(g_unichar_toupper(c), utf8_character)); - - // Set lowercase the first character of this word if found in the exempt words list - for (i=0; exempt[i]!=NULL; i++) + // If the word is a roman numeral, capitalize all of it + if ((len = Scan_Word_Is_Roman_Numeral(word))) + { + strncpy(word, g_utf8_strup(word, len), len); + } else { - if (g_ascii_strncasecmp(exempt[i], word, strlen(exempt[i])) == 0) + // Set uppercase the first character of this word + c = g_utf8_get_char(word); + strncpy(word, utf8_character, g_unichar_to_utf8(g_unichar_toupper(c), utf8_character)); + + // Set lowercase the first character of this word if found in the exempt words list + for (i=0; exempt[i]!=NULL; i++) { - c = g_utf8_get_char(word); - strncpy(word, utf8_character, g_unichar_to_utf8(g_unichar_tolower(c), utf8_character)); - break; + if (g_ascii_strncasecmp(exempt[i], word, strlen(exempt[i])) == 0) + { + c = g_utf8_get_char(word); + strncpy(word, utf8_character, g_unichar_to_utf8(g_unichar_tolower(c), utf8_character)); + break; + } } } @@ -1574,13 +1558,17 @@ void Scan_Process_Fields_First_Letters_Uppercase (gchar *text) // Uppercase letter placed after some characters like '(', '[', '{' set_to_upper_case = FALSE; - for (temp = text; *temp; temp = g_utf8_next_char(temp)) + for (temp = string; *temp; temp = g_utf8_next_char(temp)) { c = g_utf8_get_char(temp); set_to_upper_case_tmp = ( c == (gunichar)'(' || c == (gunichar)'[' || c == (gunichar)'{' || c == (gunichar)'"' + || c == (gunichar)':' + || c == (gunichar)'.' + || c == (gunichar)'`' + || c == (gunichar)'-' ) ? TRUE : FALSE; if (set_to_upper_case && g_unichar_islower(c)) @@ -1591,11 +1579,12 @@ void Scan_Process_Fields_First_Letters_Uppercase (gchar *text) } -void Scan_Process_Fields_Remove_Space (gchar *text) +void Scan_Process_Fields_Remove_Space (gchar *string) { gchar *tmp, *tmp1; + + tmp = tmp1 = string; - tmp = tmp1 = text; while (*tmp) { while (*tmp == ' ') @@ -1606,14 +1595,28 @@ void Scan_Process_Fields_Remove_Space (gchar *text) *tmp1 = '\0'; } -void Scan_Process_Fields_Insert_Space (gchar *text) +/* + * The function inserts a space before an uppercase letter + * It is needed to realloc the memory! + */ +void Scan_Process_Fields_Insert_Space (gchar **string) { gchar *iter; gunichar c; gint j; - - // FIXME: try to use realloc - for (iter = g_utf8_next_char(text); *iter; iter = g_utf8_next_char(iter)) // i=1 to not consider first "uppercase" letter + guint string_length; + gchar *string1; + + // FIX ME : we suppose that it will not grow more than 2 times its size... + string_length = 2 * strlen(*string); + //string1 = g_realloc(*string, string_length+1); + string1 = g_malloc(string_length+1); + strncpy(string1,*string,string_length); + string1[string_length]='\0'; + g_free(*string); + *string = string1; + + for (iter = g_utf8_next_char(*string); *iter; iter = g_utf8_next_char(iter)) // At start : g_utf8_next_char to not consider first "uppercase" letter { c = g_utf8_get_char(iter); @@ -1626,10 +1629,16 @@ void Scan_Process_Fields_Insert_Space (gchar *text) } } } -void Scan_Process_Fields_Keep_One_Space (gchar *text) + +/* + * The function removes the duplicated spaces + * No needed to reallocate + */ +void Scan_Process_Fields_Keep_One_Space (gchar *string) { gchar *tmp, *tmp1; - tmp = tmp1 = text; + + tmp = tmp1 = string; // Remove multiple consecutive underscores and spaces. while (*tmp1) @@ -1647,6 +1656,7 @@ void Scan_Process_Fields_Keep_One_Space (gchar *text) /* * Function to replace underscore '_' by a space + * No needed to reallocate */ void Scan_Convert_Underscore_Into_Space (gchar *string) { @@ -1658,6 +1668,7 @@ void Scan_Convert_Underscore_Into_Space (gchar *string) /* * Function to replace %20 by a space + * No needed to reallocate */ void Scan_Convert_P20_Into_Space (gchar *string) { @@ -1675,6 +1686,7 @@ void Scan_Convert_P20_Into_Space (gchar *string) /* * Function to replace space by '_' + * No needed to reallocate */ void Scan_Convert_Space_Into_Undescore (gchar *string) { @@ -1688,17 +1700,113 @@ void Scan_Convert_Space_Into_Undescore (gchar *string) * Replace something with something else ;) * Currently this only works with one character for each */ -void Scan_Convert (gchar *string) +void Scan_Convert_Character (gchar **string) { - gchar *tmp; gchar *from = gtk_editable_get_chars(GTK_EDITABLE(ProcessFieldsConvertFrom),0,-1 ); gchar *to = gtk_editable_get_chars(GTK_EDITABLE(ProcessFieldsConvertTo),0,-1 ); - - if ( from && to && strlen(from)>0 && strlen(to)>0 ) - while ((tmp=strchr(string,*from))!=NULL) - *tmp = *to; + const gchar *s; + const gchar *current; + GSList *tokens_list, *list; + gchar *token; + gint n_tokens; + gchar **result; + + + tokens_list = NULL; + n_tokens = 0; + s = current = *string; + + // Find tokens + if (strlen(from) > 0) + { + while (s + && *s != '\0' + && (s = g_strstr_len(current,strlen(current),from)) ) + { + token = g_strndup(current, s - current); + tokens_list = g_slist_prepend(tokens_list, token); + n_tokens++; + current = s + strlen(from); + } + // For the last token + if (s == NULL) + { + token = g_strndup(current,strlen(current)); + tokens_list = g_slist_prepend(tokens_list, token); + n_tokens++; + } + }else + { + // We search an empty string... we suppose it exists between each UTF-8 character + while (s + && *s != '\0' + && (s = g_utf8_find_next_char(current,NULL)) ) + { + token = g_strndup(current, s - current); + tokens_list = g_slist_prepend(tokens_list, token); + n_tokens++; + current = s; + } + } + + // Load the tokens list in an array for g_strjoinv + result = g_new (gchar *, n_tokens + 1); + result[n_tokens] = NULL; + for (list = tokens_list; list != NULL; list = list->next) + result[--n_tokens] = list->data; + g_slist_free(tokens_list); + + g_free(*string); + + // Join all the tokens with the 'to' separator + *string = g_strjoinv(to,result); + + g_strfreev(result); } +/* + * Quick roman numeral check (non-roman numerals may also return true) + * Patch from Slash Bunny (2007.08.12) + * (http://home.hiwaay.net/~lkseitz/math/roman/numerals.shtml) + * I = 1 (one) + * V = 5 (five) + * X = 10 (ten) + * L = 50 (fifty) + * C = 100 (one hundred) + * D = 500 (five hundred) + * M = 1000 (one thousand) + */ +gint Scan_Word_Is_Roman_Numeral (gchar *text) +{ + gchar *tmp; + gint len; + + tmp = text; + len = 0; + + while (*tmp) + { + if (*tmp == (gunichar)'i' || + *tmp == (gunichar)'v' || + *tmp == (gunichar)'x' || + *tmp == (gunichar)'l' || + *tmp == (gunichar)'c' || + *tmp == (gunichar)'d' || + *tmp == (gunichar)'m') + { + tmp++; + len++; + } else if (*tmp == ' ' || *tmp == '_') + { + return len; + } else + { + return 0; + } + } + + return len; +} /* @@ -1830,13 +1938,16 @@ void Open_ScannerWindow (gint scanner_type) gtk_widget_set_size_request(ScannerOptionCombo, 160, -1); /* Option for Tag */ - gtk_combo_box_append_text(GTK_COMBO_BOX(ScannerOptionCombo), _(Scanner_Option_Menu_Items[SCANNER_FILL_TAG])); + gtk_combo_box_append_text(GTK_COMBO_BOX(ScannerOptionCombo), + _(Scanner_Option_Menu_Items[SCANNER_FILL_TAG])); /* Option for FileName */ - gtk_combo_box_append_text(GTK_COMBO_BOX(ScannerOptionCombo), _(Scanner_Option_Menu_Items[SCANNER_RENAME_FILE])); + gtk_combo_box_append_text(GTK_COMBO_BOX(ScannerOptionCombo), + _(Scanner_Option_Menu_Items[SCANNER_RENAME_FILE])); /* Option for ProcessFields */ - gtk_combo_box_append_text(GTK_COMBO_BOX(ScannerOptionCombo), _(Scanner_Option_Menu_Items[SCANNER_PROCESS_FIELDS])); + gtk_combo_box_append_text(GTK_COMBO_BOX(ScannerOptionCombo), + _(Scanner_Option_Menu_Items[SCANNER_PROCESS_FIELDS])); // Selection of the item made at the end of the function gtk_tooltips_set_tip(Tips, EventBox, _("Select the type of scanner to use"), NULL); @@ -2135,19 +2246,23 @@ void Open_ScannerWindow (gint scanner_type) gtk_box_pack_start(GTK_BOX(VBox),ProcessFieldsConvertIntoSpace,FALSE,FALSE,0); gtk_box_pack_start(GTK_BOX(VBox),ProcessFieldsConvertSpace, FALSE,FALSE,0); hbox = gtk_hbox_new(FALSE,2); + gtk_box_pack_start(GTK_BOX(VBox),hbox,FALSE,FALSE,0); ProcessFieldsConvert = gtk_check_button_new_with_label(_("Convert:")); // Patch from Ben Hearsum, Oct. 3, 2003 ProcessFieldsConvertTo = gtk_entry_new(); ProcessFieldsConvertLabelTo = gtk_label_new(_("to: ")); // A "space" at the end to allow an other traduction for "to :" (needed in French!) ProcessFieldsConvertFrom = gtk_entry_new(); - gtk_entry_set_max_length(GTK_ENTRY(ProcessFieldsConvertTo), 1); - gtk_entry_set_max_length(GTK_ENTRY(ProcessFieldsConvertFrom), 1); - gtk_widget_set_size_request(ProcessFieldsConvertTo,40,-1); - gtk_widget_set_size_request(ProcessFieldsConvertFrom,40,-1); + //gtk_entry_set_max_length(GTK_ENTRY(ProcessFieldsConvertTo), 1); // Now, it isn't limited to one character + //gtk_entry_set_max_length(GTK_ENTRY(ProcessFieldsConvertFrom), 1); + gtk_widget_set_size_request(ProcessFieldsConvertTo,120,-1); + gtk_widget_set_size_request(ProcessFieldsConvertFrom,120,-1); gtk_box_pack_start(GTK_BOX(hbox),ProcessFieldsConvert, FALSE,FALSE,0); gtk_box_pack_start(GTK_BOX(hbox),ProcessFieldsConvertFrom, FALSE,FALSE,0); - gtk_box_pack_start(GTK_BOX(hbox),ProcessFieldsConvertLabelTo,FALSE,FALSE,4); + gtk_box_pack_start(GTK_BOX(hbox),ProcessFieldsConvertLabelTo,FALSE,FALSE,0); gtk_box_pack_start(GTK_BOX(hbox),ProcessFieldsConvertTo, FALSE,FALSE,0); - gtk_box_pack_start(GTK_BOX(VBox),hbox,FALSE,FALSE,0); + if (PROCESS_FIELDS_CONVERT_FROM) + gtk_entry_set_text(GTK_ENTRY(ProcessFieldsConvertFrom),PROCESS_FIELDS_CONVERT_FROM); + if (PROCESS_FIELDS_CONVERT_TO) + gtk_entry_set_text(GTK_ENTRY(ProcessFieldsConvertTo),PROCESS_FIELDS_CONVERT_TO); /* List creation for check buttons in group */ pf_cb_group1 = g_list_append (pf_cb_group1,ProcessFieldsConvertIntoSpace); pf_cb_group1 = g_list_append (pf_cb_group1,ProcessFieldsConvertSpace); @@ -2168,7 +2283,8 @@ void Open_ScannerWindow (gint scanner_type) gtk_tooltips_set_tip(Tips,ProcessFieldsConvertSpace, _("The space character is replaced by one underscore character. " "Example, before: 'Text In An Entry', after: 'Text_In_An_Entry'."),NULL); - gtk_tooltips_set_tip(Tips,ProcessFieldsConvert,_("Replace a character by an other one."),NULL); + gtk_tooltips_set_tip(Tips,ProcessFieldsConvert, + _("Replace a string by an other one. Note that the search is case sensitive."),NULL); /* Separator line */ Separator = gtk_hseparator_new(); @@ -2217,16 +2333,16 @@ void Open_ScannerWindow (gint scanner_type) gtk_box_pack_start(GTK_BOX(VBox),Separator,FALSE,FALSE,0); /* Group: insert/remove spaces */ - ProcessFieldsRemoveSpace = gtk_check_button_new_with_label(_("Remove spaces")); - ProcessFieldsInsertSpace = gtk_check_button_new_with_label(_("Insert a space before an uppercase letter")); + ProcessFieldsRemoveSpace = gtk_check_button_new_with_label(_("Remove spaces")); + ProcessFieldsInsertSpace = gtk_check_button_new_with_label(_("Insert a space before an uppercase letter")); ProcessFieldsOnlyOneSpace = gtk_check_button_new_with_label(_("Remove duplicates of space or underscore")); gtk_box_pack_start(GTK_BOX(VBox),ProcessFieldsRemoveSpace,FALSE,FALSE,0); gtk_box_pack_start(GTK_BOX(VBox),ProcessFieldsInsertSpace,FALSE,FALSE,0); gtk_box_pack_start(GTK_BOX(VBox),ProcessFieldsOnlyOneSpace,FALSE,FALSE,0); /* List creation for check buttons in group */ - pf_cb_group3 = g_list_append (pf_cb_group3,ProcessFieldsRemoveSpace); - pf_cb_group3 = g_list_append (pf_cb_group3,ProcessFieldsInsertSpace); - pf_cb_group3 = g_list_append (pf_cb_group3,ProcessFieldsOnlyOneSpace); + pf_cb_group3 = g_list_append(pf_cb_group3,ProcessFieldsRemoveSpace); + pf_cb_group3 = g_list_append(pf_cb_group3,ProcessFieldsInsertSpace); + pf_cb_group3 = g_list_append(pf_cb_group3,ProcessFieldsOnlyOneSpace); /* Toggled signals */ g_signal_connect(G_OBJECT(ProcessFieldsRemoveSpace), "toggled",G_CALLBACK(Process_Fields_Check_Button_Toggled),pf_cb_group3); g_signal_connect(G_OBJECT(ProcessFieldsInsertSpace), "toggled",G_CALLBACK(Process_Fields_Check_Button_Toggled),pf_cb_group3); @@ -2516,16 +2632,6 @@ void ScannerWindow_Quit (void) { if (ScannerWindow) { - if (SCAN_TAG_DEFAULT_MASK) g_free(SCAN_TAG_DEFAULT_MASK); - SCAN_TAG_DEFAULT_MASK = g_strdup(gtk_entry_get_text(GTK_ENTRY(GTK_BIN(ScanTagMaskCombo)->child))); - Add_String_To_Combo_List(ScanTagListModel, SCAN_TAG_DEFAULT_MASK); - Save_Rename_File_Masks_List(ScanTagListModel, MASK_EDITOR_TEXT); - - if (RENAME_FILE_DEFAULT_MASK) g_free(RENAME_FILE_DEFAULT_MASK); - RENAME_FILE_DEFAULT_MASK = g_strdup(gtk_entry_get_text(GTK_ENTRY(GTK_BIN(RenameFileMaskCombo)->child))); - Add_String_To_Combo_List(RenameFileListModel, RENAME_FILE_DEFAULT_MASK); - Save_Rename_File_Masks_List(RenameFileListModel, MASK_EDITOR_TEXT); - ScannerWindow_Apply_Changes(); gtk_widget_destroy(ScannerWindow); @@ -2587,6 +2693,11 @@ void ScannerWindow_Apply_Changes (void) PROCESS_COPYRIGHT_FIELD = GTK_TOGGLE_BUTTON(ProcessCopyrightField)->active; PROCESS_URL_FIELD = GTK_TOGGLE_BUTTON(ProcessURLField)->active; PROCESS_ENCODED_BY_FIELD = GTK_TOGGLE_BUTTON(ProcessEncodedByField)->active; + + if (PROCESS_FIELDS_CONVERT_FROM) g_free(PROCESS_FIELDS_CONVERT_FROM); + PROCESS_FIELDS_CONVERT_FROM = g_strdup(gtk_entry_get_text(GTK_ENTRY(ProcessFieldsConvertFrom))); + if (PROCESS_FIELDS_CONVERT_TO) g_free(PROCESS_FIELDS_CONVERT_TO); + PROCESS_FIELDS_CONVERT_TO = g_strdup(gtk_entry_get_text(GTK_ENTRY(ProcessFieldsConvertTo))); /* Group: convert one character */ PF_CONVERT_INTO_SPACE = GTK_TOGGLE_BUTTON(ProcessFieldsConvertIntoSpace)->active; @@ -2600,9 +2711,21 @@ void ScannerWindow_Apply_Changes (void) PF_CONVERT_FIRST_LETTERS_UPPERCASE = GTK_TOGGLE_BUTTON(ProcessFieldsFirstLettersUppercase)->active; /* Group: remove/insert space */ - PF_REMOVE_SPACE = GTK_TOGGLE_BUTTON(ProcessFieldsConvertIntoSpace)->active; - PF_INSERT_SPACE = GTK_TOGGLE_BUTTON(ProcessFieldsConvertSpace)->active; + PF_REMOVE_SPACE = GTK_TOGGLE_BUTTON(ProcessFieldsRemoveSpace)->active; + PF_INSERT_SPACE = GTK_TOGGLE_BUTTON(ProcessFieldsInsertSpace)->active; PF_ONLY_ONE_SPACE = GTK_TOGGLE_BUTTON(ProcessFieldsOnlyOneSpace)->active; + + // Save default masks... + if (SCAN_TAG_DEFAULT_MASK) g_free(SCAN_TAG_DEFAULT_MASK); + SCAN_TAG_DEFAULT_MASK = g_strdup(gtk_entry_get_text(GTK_ENTRY(GTK_BIN(ScanTagMaskCombo)->child))); + Add_String_To_Combo_List(ScanTagListModel, SCAN_TAG_DEFAULT_MASK); + Save_Rename_File_Masks_List(ScanTagListModel, MASK_EDITOR_TEXT); + + if (RENAME_FILE_DEFAULT_MASK) g_free(RENAME_FILE_DEFAULT_MASK); + RENAME_FILE_DEFAULT_MASK = g_strdup(gtk_entry_get_text(GTK_ENTRY(GTK_BIN(RenameFileMaskCombo)->child))); + Add_String_To_Combo_List(RenameFileListModel, RENAME_FILE_DEFAULT_MASK); + Save_Rename_File_Masks_List(RenameFileListModel, MASK_EDITOR_TEXT); + } } @@ -2701,7 +2824,7 @@ gboolean Scan_Check_Rename_File_Mask (GtkObject *widget_to_show_hide, GtkEntry * if (!mask || strlen(mask)<1) goto Bad_Mask; - // Since version 1.99.4, it is available! + // Since version 1.99.4, it is available! => OK /*if ( strchr(mask,G_DIR_SEPARATOR)!=NULL ) // Renaming directory is not yet available goto Bad_Mask;*/ // Not a valid path.... @@ -3017,15 +3140,15 @@ void Mask_Editor_List_Duplicate (void) GList *selectedRows; GList *toInsert = NULL; GtkTreeSelection *selection; - GtkTreeIter row; - GtkTreeModel *treemodel; + GtkTreeIter rowIter; + GtkTreeModel *treeModel; gboolean valid; if (!MaskEditorList) return; selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(MaskEditorList)); selectedRows = gtk_tree_selection_get_selected_rows(selection, NULL); - treemodel = gtk_tree_view_get_model(GTK_TREE_VIEW(MaskEditorList)); + treeModel = gtk_tree_view_get_model(GTK_TREE_VIEW(MaskEditorList)); if (g_list_length(selectedRows) == 0) { @@ -3035,14 +3158,15 @@ void Mask_Editor_List_Duplicate (void) return; } - /* Loop through selected rows, duplicating them into a GList */ - /* We cannot directly insert because the paths in selectedRows get out of date after an insertion */ - while(selectedRows) + /* Loop through selected rows, duplicating them into a GList + * We cannot directly insert because the paths in selectedRows + * get out of date after an insertion */ + while (selectedRows) { - valid = gtk_tree_model_get_iter(treemodel, &row, (GtkTreePath*) selectedRows->data); + valid = gtk_tree_model_get_iter(treeModel, &rowIter, (GtkTreePath*) selectedRows->data); if (valid) { - gtk_tree_model_get(treemodel, &row, MASK_EDITOR_TEXT, &text, -1); + gtk_tree_model_get(treeModel, &rowIter, MASK_EDITOR_TEXT, &text, -1); toInsert = g_list_append(toInsert, text); } @@ -3050,18 +3174,22 @@ void Mask_Editor_List_Duplicate (void) if (!selectedRows) break; } - /* Duplicate the relevant entries, by looping through the list backwards (to preserve original order) */ + /* Duplicate the relevant entries, by looping through the list backwards + * (to preserve original order) */ toInsert = g_list_last(toInsert); - while(toInsert) + while (toInsert) { - gtk_list_store_insert(GTK_LIST_STORE(treemodel), &row, 0); - gtk_list_store_set(GTK_LIST_STORE(treemodel), &row, MASK_EDITOR_TEXT, (gchar*) toInsert->data, -1); + gtk_list_store_insert(GTK_LIST_STORE(treeModel), &rowIter, 0); + gtk_list_store_set(GTK_LIST_STORE(treeModel), &rowIter, MASK_EDITOR_TEXT, (gchar*) toInsert->data, -1); g_free(toInsert->data); toInsert = toInsert->prev; if (!toInsert) break; } - + // Set focus to the last inserted line + if (toInsert) + Mask_Editor_List_Set_Row_Visible(treeModel,&rowIter); + /* Free data no longer needed */ selectedRows = g_list_first(selectedRows); toInsert = g_list_first(toInsert); @@ -3071,7 +3199,7 @@ void Mask_Editor_List_Duplicate (void) g_list_free(toInsert); } -void Mask_Editor_List_Add(void) +void Mask_Editor_List_Add (void) { gint i = 0; GtkTreeIter iter; @@ -3183,14 +3311,15 @@ void Mask_Editor_List_Move_Up (void) selectedRowsCopy = selectedRows; - while(selectedRows) + while (selectedRows) { currentPath = (GtkTreePath*) selectedRows->data; valid = gtk_tree_model_get_iter(treemodel, ¤tFile, currentPath); if (valid) { /* Find the entry above the node... */ - if (gtk_tree_path_prev(currentPath)) { + if (gtk_tree_path_prev(currentPath)) + { /* ...and if it exists, swap the two rows by iter */ gtk_tree_model_get_iter(treemodel, &nextFile, currentPath); gtk_list_store_swap(GTK_LIST_STORE(treemodel), ¤tFile, &nextFile); @@ -3225,7 +3354,8 @@ void Mask_Editor_List_Move_Down (void) treemodel = gtk_tree_view_get_model(GTK_TREE_VIEW(MaskEditorList)); selectedRows = gtk_tree_selection_get_selected_rows(selection, NULL); - if (g_list_length(selectedRows) == 0) { + if (g_list_length(selectedRows) == 0) + { Log_Print(_("Move Down: No row selected!")); g_list_foreach(selectedRows, (GFunc)gtk_tree_path_free, NULL); g_list_free(selectedRows); @@ -3242,8 +3372,8 @@ void Mask_Editor_List_Move_Down (void) { /* Find the entry below the node and swap the two nodes by iter */ gtk_tree_path_next(currentPath); - gtk_tree_model_get_iter(treemodel, &nextFile, currentPath); - gtk_list_store_swap(GTK_LIST_STORE(treemodel), ¤tFile, &nextFile); + if (gtk_tree_model_get_iter(treemodel, &nextFile, currentPath)) + gtk_list_store_swap(GTK_LIST_STORE(treemodel), ¤tFile, &nextFile); } if (!selectedRows->next) break; @@ -3254,6 +3384,25 @@ void Mask_Editor_List_Move_Down (void) g_list_free(selectedRowsCopy); } +/* + * Set a row visible in the mask editor list (by scrolling the list) + */ +void Mask_Editor_List_Set_Row_Visible (GtkTreeModel *treeModel, GtkTreeIter *rowIter) +{ + /* + * TODO: Make this only scroll to the row if it is not visible + * (like in easytag GTK1) + * See function gtk_tree_view_get_visible_rect() ?? + */ + GtkTreePath *rowPath; + + if (!treeModel) return; + + rowPath = gtk_tree_model_get_path(treeModel, rowIter); + gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW(MaskEditorList), rowPath, NULL, FALSE, 0, 0); + gtk_tree_path_free(rowPath); +} + /* * Save the currently displayed mask list in the mask editor */ diff --git a/src/scan.h b/src/scan.h old mode 100755 new mode 100644 index 3173aa3..de151a2 --- a/src/scan.h +++ b/src/scan.h @@ -67,18 +67,18 @@ void Scan_Use_Process_Fields_Scanner (void); gboolean Scan_Check_Rename_File_Mask (GtkObject *widget_to_show_hide, GtkEntry *widget_source); -void Scan_Process_Fields_All_Uppercase (gchar *text); -void Scan_Process_Fields_All_Downcase (gchar *text); -void Scan_Process_Fields_Letter_Uppercase (gchar *text); -void Scan_Process_Fields_First_Letters_Uppercase (gchar *text); -void Scan_Process_Fields_Remove_Space (gchar *text); -void Scan_Process_Fields_Insert_Space (gchar *text); -void Scan_Process_Fields_Keep_One_Space (gchar *text); +void Scan_Process_Fields_All_Uppercase (gchar *string); +void Scan_Process_Fields_All_Downcase (gchar *string); +void Scan_Process_Fields_Letter_Uppercase (gchar *string); +void Scan_Process_Fields_First_Letters_Uppercase (gchar *string); +void Scan_Process_Fields_Remove_Space (gchar *string); +void Scan_Process_Fields_Insert_Space (gchar **string); +void Scan_Process_Fields_Keep_One_Space (gchar *string); void Scan_Convert_Underscore_Into_Space (gchar *string); void Scan_Convert_P20_Into_Space (gchar *string); void Scan_Convert_Space_Into_Undescore (gchar *string); -void Scan_Convert (gchar *string); +void Scan_Convert_Character (gchar **string); void Init_ScannerWindow (void); void Open_ScannerWindow (gint scanner_type); diff --git a/src/setting.c b/src/setting.c old mode 100755 new mode 100644 index 93d11a3..9b00a32 --- a/src/setting.c +++ b/src/setting.c @@ -138,6 +138,8 @@ tConfigVariable Config_Variables[] = {"set_focus_to_first_tag_field", CV_TYPE_BOOL, &SET_FOCUS_TO_FIRST_TAG_FIELD }, {"sorting_file_mode", CV_TYPE_INT, &SORTING_FILE_MODE }, {"sorting_file_case_sensitive", CV_TYPE_BOOL, &SORTING_FILE_CASE_SENSITIVE }, + {"log_max_lines", CV_TYPE_INT, &LOG_MAX_LINES }, + {"sho_log_view", CV_TYPE_BOOL, &SHOW_LOG_VIEW }, {"replace_illegal_character_in_filename", CV_TYPE_BOOL, &REPLACE_ILLEGAL_CHARACTERS_IN_FILENAME }, {"filename_extension_lower_case", CV_TYPE_BOOL, &FILENAME_EXTENSION_LOWER_CASE }, @@ -211,6 +213,8 @@ tConfigVariable Config_Variables[] = {"process_copyright_field", CV_TYPE_BOOL, &PROCESS_COPYRIGHT_FIELD }, {"process_url_field", CV_TYPE_BOOL, &PROCESS_URL_FIELD }, {"process_encoded_by_field", CV_TYPE_BOOL, &PROCESS_ENCODED_BY_FIELD }, + {"process_fields_convert_from", CV_TYPE_STRING, &PROCESS_FIELDS_CONVERT_FROM }, + {"process_fields_convert_to", CV_TYPE_STRING, &PROCESS_FIELDS_CONVERT_TO }, {"pf_convert_into_space", CV_TYPE_BOOL, &PF_CONVERT_INTO_SPACE }, {"pf_convert_space", CV_TYPE_BOOL, &PF_CONVERT_SPACE }, @@ -339,7 +343,7 @@ void Init_Config_Variables (void) /* * Common */ - LOAD_ON_STARTUP = 1; + LOAD_ON_STARTUP = 0; DEFAULT_PATH_TO_MP3 = g_strdup(HOME_VARIABLE); BROWSE_SUBDIR = 1; #ifdef WIN32 @@ -377,6 +381,8 @@ void Init_Config_Variables (void) #else SORTING_FILE_CASE_SENSITIVE = 0; #endif + LOG_MAX_LINES = 50; + SHOW_LOG_VIEW = 1; MESSAGE_BOX_POSITION_NONE = 0; MESSAGE_BOX_POSITION_CENTER = 0; @@ -471,6 +477,9 @@ void Init_Config_Variables (void) PROCESS_COPYRIGHT_FIELD = 1; PROCESS_URL_FIELD = 1; PROCESS_ENCODED_BY_FIELD = 1; + + PROCESS_FIELDS_CONVERT_FROM = NULL; + PROCESS_FIELDS_CONVERT_TO = NULL; PF_CONVERT_INTO_SPACE = 1; PF_CONVERT_SPACE = 0; @@ -646,6 +655,8 @@ void Apply_Changes_Of_Preferences_Window (void) SORTING_FILE_CASE_SENSITIVE = GTK_TOGGLE_BUTTON(SortingFileCaseSensitive)->active; SET_FOCUS_TO_SAME_TAG_FIELD = GTK_TOGGLE_BUTTON(SetFocusToSameTagField)->active; SET_FOCUS_TO_FIRST_TAG_FIELD = GTK_TOGGLE_BUTTON(SetFocusToFirstTagField)->active; + LOG_MAX_LINES = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(LogMaxLinesSpinButton)); + SHOW_LOG_VIEW = GTK_TOGGLE_BUTTON(ShowLogView)->active; SORTING_FILE_MODE = gtk_combo_box_get_active(GTK_COMBO_BOX(SortingFileCombo)); @@ -782,6 +793,9 @@ void Apply_Changes_Of_Preferences_Window (void) if (SHOW_HEADER_INFO) gtk_widget_show_all(HeaderInfosTable); else gtk_widget_hide_all(HeaderInfosTable); + if (SHOW_LOG_VIEW) gtk_widget_show_all(LogArea); + else gtk_widget_hide_all(LogArea); + /* Update state of check-menu-item into main/popup menu to browse subdirs */ Check_Menu_Item_Update_Browse_Subdir(); diff --git a/src/setting.h b/src/setting.h old mode 100755 new mode 100644 index fceba05..a2b3042 --- a/src/setting.h +++ b/src/setting.h @@ -126,6 +126,8 @@ gint NUMBER_TRACK_FORMATED_SPIN_BUTTON; gint OGG_TAG_WRITE_XMMS_COMMENT; gint SET_FOCUS_TO_SAME_TAG_FIELD; gint SET_FOCUS_TO_FIRST_TAG_FIELD; +gint LOG_MAX_LINES; +gint SHOW_LOG_VIEW; /* Scanner */ @@ -139,7 +141,7 @@ gint RFS_CONVERT_SPACE_INTO_UNDERSCORE; gint PFS_DONT_UPPER_SOME_WORDS; gint OVERWRITE_TAG_FIELD; gint SET_DEFAULT_COMMENT; -gchar *DEFAULT_COMMENT; +gchar *DEFAULT_COMMENT; gint SET_CRC32_COMMENT; gint OPEN_SCANNER_WINDOW_ON_STARTUP; gint SCANNER_WINDOW_ON_TOP; @@ -166,6 +168,8 @@ gint PROCESS_ORIG_ARTIST_FIELD; gint PROCESS_COPYRIGHT_FIELD; gint PROCESS_URL_FIELD; gint PROCESS_ENCODED_BY_FIELD; +gchar *PROCESS_FIELDS_CONVERT_FROM; +gchar *PROCESS_FIELDS_CONVERT_TO; gint PF_CONVERT_INTO_SPACE; gint PF_CONVERT_SPACE; gint PF_CONVERT; diff --git a/src/win32/win32dep.c b/src/win32/win32dep.c old mode 100755 new mode 100644 index a644adc..9e400af --- a/src/win32/win32dep.c +++ b/src/win32/win32dep.c @@ -456,38 +456,3 @@ BOOL WINAPI DllMain ( HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved ) ET_dll_hInstance = hinstDLL; return TRUE; } - - -/* - * Copyright (C) 2002 Manuel Novoa III - * Copyright (C) 2000-2005 Erik Andersen - * - * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. - */ - -#include -#include - -char *strcasestr(const char *s1, const char *s2) -{ - register const char *s = s1; - register const char *p = s2; - - do { - if (!*p) { - return (char *) s1;; - } - if ((*p == *s) - || (tolower(*((unsigned char *)p)) == tolower(*((unsigned char *)s))) - ) { - ++p; - ++s; - } else { - p = s2; - if (!*s) { - return NULL; - } - s = ++s1; - } - } while (1); -} \ No newline at end of file diff --git a/src/win32/win32dep.h b/src/win32/win32dep.h old mode 100755 new mode 100644 index 7e5e1ae..9107852 --- a/src/win32/win32dep.h +++ b/src/win32/win32dep.h @@ -34,8 +34,6 @@ #define chown(a,b,c) #define chmod(a,b) -//#define strcasestr(haystack, needle) strstr(haystack, needle) -char *strcasestr(const char *s1, const char *s2); -- cgit v1.2.3